在R中堆叠配对列:添加Pre/Post作为分组标签的方法求助
解决HLM数据集配对式透视问题
要实现你需要的配对堆叠效果,核心是将列名拆分为**测试阶段(Pre/Post)和测试类型(Con/Mcq/FR)**两个维度,再重新调整列结构。用tidyr包的pivot_longer+pivot_wider组合可以一步到位:
library(tidyr) # 处理数据集 datl <- exdat %>% # 拆分列名为测试阶段和测试类型 pivot_longer( cols = starts_with(c("Pre", "Post")), # 自动匹配所有Pre/Post开头的列 names_to = c("Test", "Type"), # 拆分后生成两个新列 names_pattern = "(Pre|Post)(Con|Mcq|FR)" # 正则表达式拆分列名前缀和后缀 ) %>% # 将测试类型转为单独的列 pivot_wider( names_from = Type, # 以Type的取值作为新列名 values_from = value # 对应填充原value的值 )
处理后效果说明
处理后的数据会将原有的6个测试列转化为:
Test列:标记当前行是前测(Pre)还是后测(Post)Con/Mcq/FR列:分别对应对应测试阶段的得分- 其他变量(
sub_id/mtt_score/time等)会自动重复,保持每个测试阶段的观测完整性
示例输出片段:
sub_id mtt_score vat_score time concept cond day Test Con Mcq FR <int> <int> <int> <int> <chr> <chr> <int> <chr> <int> <int> <int> 1 1 9 26 1 cornea C 1 Pre 0 1 0 2 1 9 26 1 cornea C 1 Post 2 1 3 3 1 9 26 2 thyroid S 1 Pre 1 0 1 4 1 9 26 2 thyroid S 1 Post 2 0 0
关键参数解释
names_pattern:用正则表达式(Pre|Post)匹配列名前缀(测试阶段),(Con|Mcq|FR)匹配后缀(测试类型),实现列名的精准拆分starts_with(c("Pre", "Post")):自动筛选目标列,避免手动列写所有列名,提升代码灵活性
内容的提问来源于stack exchange,提问作者Maranta
相关产品推荐
相关产品推荐

