如何使用R语言reshape函数将多时间点测量的宽型数据转为长型
使用base R的reshape函数完成宽表转长表操作
针对你给出的宽表结构和目标长表格式,可通过以下参数配置调用基础reshape函数完成转换,操作步骤如下:
- 首先复现原始宽表数据,假设数据存储为
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) )
- 按照目标输出结构(仅保留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
- 转换结果校验:输出长表的前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
相关产品推荐
相关产品推荐

