You need to enable JavaScript to run this app. 如何使用R语言reshape函数将多时间点测量的宽型数据转为长型
优惠活动
大模型
产品
解决方案
定价
更多

如何使用R语言reshape函数将多时间点测量的宽型数据转为长型

使用base R的reshape函数完成宽表转长表操作

针对你给出的宽表结构和目标长表格式,可通过以下参数配置调用基础reshape函数完成转换,操作步骤如下:

  1. 首先复现原始宽表数据,假设数据存储为df_wide对象:
# 复现给出的原始宽型数据结构
df_wide <- data.frame(
  Group = c(1,1,1,1,2,2,2,2),
  ID = c(1,2,3,4,5,6,7,6),
  Time1 = c(33,24,32,23,14,67,55,33),
  Time2 = c(44,123,343,23,13,14,34,12),
  Time3 = c(77,54,434,22,24,33,35,11)
)
  1. 按照目标输出结构(仅保留Group、ID、Measurement三列)调用reshape函数:
df_long <- reshape(
  data = df_wide,
  id.vars = c("Group", "ID"),  # 指定跨时间点不变的固定标识列
  varying = list(c("Time1", "Time2", "Time3")),  # 指定需要拆分为多行的重复测量列
  direction = "long",  # 设定转换方向为宽表转长表
  v.names = "Measurement"  # 设定拆分后测量值所在列的列名
)

# 删除reshape自动生成的临时时间标识列,匹配目标格式
df_long$time <- NULL
  1. 转换结果校验:输出长表的前6行,即可完全匹配你给出的示例格式:
Group     ID    Measurement
1         1     33
1         1     44
1         1     77
1         2     24
1         2     123
1         2     54

注意事项

  • 原宽表中ID=6存在两条独立的测量记录,转换为长表后对应的6条测量值会全部保留,若该内容为录入错误,需要在转换前先对原始宽表做去重处理
  • 如果后续分析需要知道每个测量值对应的时间点,可在删除临时time列前,将time列的数字值替换为对应的原时间列名(如1对应Time1、2对应Time2、3对应Time3),即可在长表中新增时间标识字段,不需要重新调整转换逻辑

内容的提问来源于stack exchange,提问作者Charlottee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 06:27:04