如何在R中使用pivot_longer拆分变量名生成时间列?
用pivot_longer将前后测控制组数据集转成长格式
你的代码在names_to和names_sep的用法上有误,导致转换失败,下面是正确的实现方式:
核心问题修正
names_to不能用冒号指定变量范围,它需要定义拆分后生成的新列名称(比如变量名列和时间点列)names_sep不能直接传入c("_t1", "_t2"),得用正则表达式匹配后缀,或者用names_pattern精准拆分变量名和时间标记
正确代码示例
先拿一个模拟的同结构数据集演示:
library(tidyverse) # 模拟你的前后测数据集 df <- structure( list( vp_code = c("IL1501", "IH2702", "IL1603"), HTKS_test1_summe_t1 = c(12, 15, 10), HTKS_test1_summe_t2 = c(14, 16, 13), SS_summe_gesamt_t1 = c(20, 22, 18), SS_summe_gesamt_t2 = c(23, 25, 21), non_relevant_var = c("X", "Y", "Z") # 示例非时间相关变量 ), class = "data.frame" ) # 转换为长格式 data_long <- pivot_longer( df, cols = matches("_t[12]$"), # 精准匹配所有以_t1/_t2结尾的变量 names_to = c("variable", "time"), # 拆分出变量名和时间点两个新列 names_pattern = "(.*)_(t[12])", # 正则分组:捕获前缀和时间后缀 values_drop_na = TRUE ) # 查看转换结果 print(data_long)
可选写法(用names_sep)
如果不想写正则,也可以用names_sep拆分,之后再补全时间标记:
data_long <- pivot_longer( df, cols = contains(c("_t1", "_t2")), names_to = c("variable", "time"), names_sep = "_t", # 按"_t"拆分 values_drop_na = TRUE ) # 把time列的"1"/"2"改成"t1"/"t2" data_long$time <- paste0("t", data_long$time)
内容的提问来源于stack exchange,提问作者juliawwu
相关产品推荐
相关产品推荐

