R语言如何拉伸长表为按用户生成前缀列的宽表?
你之前的dcast参数设置不符合转换逻辑:公式左侧是要保留为行维度的变量,右侧是要扩展为列维度的变量,value.var是要填充到单元格的数值字段,你之前的设置刚好和需求相反。
正确实现代码(基于data.table)
library(data.table) # 转换为data.table格式 setDT(frame) # 第一步:先将宽表转为更长的长格式,保留行标识为iteration_round和name molten_dt <- melt(frame, id.vars = c("iteration_round", "name"), measure.vars = c("var1", "var2", "var3", "var4")) # 第二步:按iteration_round为行,name+变量名组合为列转宽,自动生成name_varx格式的列名 res_dt <- dcast(molten_dt, iteration_round ~ name + variable, value.var = "value") # 调整列顺序,将iteration_round放到最后一列 setcolorder(res_dt, c(setdiff(names(res_dt), "iteration_round"), "iteration_round"))
输出结果
用你提供的样例数据运行后,res_dt的输出完全匹配需求:
person1_var1 person1_var2 person1_var3 person1_var4 person2_var1 person2_var2 person2_var3 person2_var4 person3_var1 person3_var2 person3_var3 person3_var4 iteration_round 1: 1 1 21.931815 0.4904012 3 1 -2.261360 -2.3358434 5 1 5.493085 5.726929 1 2: 6 1 -5.039148 -9.4483417 7 1 -3.662336 5.8499795 3 1 5.297230 -2.875617 2
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

