如何在R中用dplyr或data.table实现多字段宽表转长表?
解决方案
首先,你的原始代码存在两个主要问题:缺少闭合括号,以及value.name中使用了TIME_而非目标列名TIME。以下是修正后的完整实现:
library(data.table) # 假设你的数据已加载为DATA,转换为data.table并执行宽转长 long_data <- melt(setDT(DATA), measure = patterns("TIME_", "math", "hist"), variable.name = "time_point", value.name = c("TIME", "math", "hist")) # 可选:移除临时标记列,并调整列顺序匹配目标格式 long_data[, time_point := NULL] setcolorder(long_data, c("STUDENT", "CLASS", "TIME", "math", "hist"))
代码说明:
patterns("TIME_", "math", "hist"):按前缀分组原始列,将TIME_1/TIME_2、math1/math2、hist1/hist2分别映射到新列TIME、math、hist。variable.name = "time_point":生成临时列标记当前行对应原始数据的第几个时间点(1或2),后续可按需删除。value.name:指定转换后的目标列名,这里修正为TIME以匹配你的需求。
输出结果:
执行后得到的long_data即为你需要的长格式数据(R中空值以NA表示,与示例空白效果一致):
STUDENT CLASS TIME math hist 1: 1 90 119 4 3 2: 2 8 NA 4 NA 3: 3 3 74 5 8 4: 1 90 106 6 10 5: 2 8 115 7 2 6: 3 3 112 7 10
内容的提问来源于stack exchange,提问作者bvowe
相关产品推荐
相关产品推荐

