You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 12:50:55