R语言中实现行因子转置为列的数据框重塑需求
解决方案
你要实现的是数据框的宽表转换:把var3的不同类别转为单独列,对应填充var4的值,同时保留var1和var2作为标识列,且同一var1下的var2需唯一。下面提供两种常用实现方法:
方法1:使用tidyr包的pivot_wider(推荐)
tidyr是tidyverse生态的核心工具,语法直观易读:
# 若未安装tidyr,先运行 install.packages("tidyr") library(tidyr) df2 <- pivot_wider( data = df, id_cols = c(var1, var2), # 保留的唯一标识列 names_from = var3, # 转为新列名的变量 values_from = var4, # 填充到新列的值来源 values_fill = NA # 缺失值用NA填充 )
运行后会自动合并var1=B且var2=-1的两行,将oo和rr列分别填充为7和2,其余位置补NA,完全匹配你的期望结果。
方法2:使用reshape2包的dcast
如果习惯用reshape2包,也可以通过dcast实现:
# 若未安装reshape2,先运行 install.packages("reshape2") library(reshape2) df2 <- dcast( data = df, var1 + var2 ~ var3, # 左侧为标识列,右侧为要转成列的变量 value.var = "var4", # 填充值的来源列 fun.aggregate = NULL # 同一标识下每个var3仅对应一个值,无需聚合 )
结果验证
执行任意代码后,打印df2即可看到符合预期的输出:
> print(df2) var1 var2 pp mm oo rr 1 A -1.0 2 NA NA NA 2 A 0.5 NA 1 NA NA 3 A 1.5 NA 4 NA NA 4 A 2.5 NA 3 NA NA 5 A 3.5 NA 6 NA NA 6 A 4.0 NA 4 NA NA 7 B -1.0 NA NA 7 2
内容的提问来源于stack exchange,提问作者Rinot
相关产品推荐
相关产品推荐

