我正在处理数据集并为 HLM 准备变量。我有六个单独的列代表测试前和测试后的数据。请参阅下面的示例:
> head(exdat)
sub_id mtt_score vat_score time concept cond day PreCon PreMcq PreFR PostCon PostMcq PostFR
1 1 9 26 1 cornea C 1 0 1 0 2 1 3
2 1 9 26 2 thyroid S 1 1 0 1 2 0 0
3 1 9 26 3 cilia G 2 0 0 0 1 0 0
4 1 9 26 4 histone C 1 0 0 0 1 0 0
5 1 9 26 5 epithelium G 1 0 0 0 1 0 0
6 1 9 26 6 iris S 1 4 1 1 3 1 3
对于上述内容,我想“堆叠”具有匹配后缀的列:“-Con”、“-Mcq”和“-FR”,并添加一个附加列,其中“Pre”和“Post”标记为一个额外的变量。
我想要“插值”堆叠,以便 Pre 堆叠在所有三个的 Post 之上:Con、Mcq、Fr。所有其他变量应该重复。
我试过这个:
datl <- pivot_longer(
dat,
cols = c(PreCon, PreMcq, PreFR, PostCon, PostMcq, PostFR),
names_to = "Test"
)
但是输出将所有列堆叠在一起,如下所示:
sub_id mtt_score vat_score time concept cond day Test value
<int> <int> <int> <int> <chr> <chr> <int> <chr> <int>
1 9 26 1 cornea Comp 1 PreCon 0
1 9 26 1 cornea Comp 1 PreMcq 1
1 9 26 1 cornea Comp 1 PreFR 0
1 9 26 1 cornea Comp 1 PostCon 2
1 9 26 1 cornea Comp 1 PostMcq 1
1 9 26 1 cornea Comp 1 PostFR 3
我不确定如何以所描述的成对方式旋转列。任何智慧将不胜感激。
我不确定我是否理解您想要的最终数据布局。这段代码能实现你想要的功能吗?
library(tidyverse)
dat <- read.csv("~/R/Play/Dummy.csv")
datl <- pivot_longer(
dat,
cols = c(PreCon, PostCon, PreMcq, PostMcq, PreFR, PostFR),
names_to = "Test"
) |>
separate_wider_regex("Test", patterns = c(Pre_Post = "Pre|Post", Test = "Con|Mcq|FR"))
datl
#> # A tibble: 36 × 10
#> sub_id mtt_score vat_score time concept cond day Pre_Post Test value
#> <int> <int> <int> <int> <chr> <chr> <int> <chr> <chr> <int>
#> 1 1 9 26 1 cornea C 1 Pre Con 0
#> 2 1 9 26 1 cornea C 1 Post Con 2
#> 3 1 9 26 1 cornea C 1 Pre Mcq 1
#> 4 1 9 26 1 cornea C 1 Post Mcq 1
#> 5 1 9 26 1 cornea C 1 Pre FR 0
#> 6 1 9 26 1 cornea C 1 Post FR 3
#> 7 1 9 26 2 thyroid S 1 Pre Con 1
#> 8 1 9 26 2 thyroid S 1 Post Con 2
#> 9 1 9 26 2 thyroid S 1 Pre Mcq 0
#> 10 1 9 26 2 thyroid S 1 Post Mcq 0
#> # ℹ 26 more rows
创建于 2024 年 10 月 30 日,使用 reprex v2.1.1