在R中堆叠成对的列;添加部分名称作为标签

问题描述 投票:0回答:1

我正在处理数据集并为 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

我不确定如何以所描述的成对方式旋转列。任何智慧将不胜感激。

r
1个回答
0
投票

我不确定我是否理解您想要的最终数据布局。这段代码能实现你想要的功能吗?

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

© www.soinside.com 2019 - 2024. All rights reserved.