R语言中将垂直DataFrame转换为水平格式的实现问题咨询
实现方案
你需要的是长表转宽表操作,和你猜测的melt()功能相反(melt()用于宽表转长表),以下是适配不同场景的实现方案,支持你真实场景下800万行数据、450个统计名称的转换需求:
方案1:tidyverse套件(代码最简洁,适合中小数据量)
用tidyr::pivot_wider()函数实现:
library(tidyr) library(dplyr) df2 <- df1 %>% pivot_wider( id_cols = c(Team_Code, Coef_Name, Year, Date), names_from = Stat_Name, values_from = Adj_Stat_Value )
方案2:data.table(800万行大数据量最优,运行速度最快)
千万级数据场景下推荐用data.table的dcast()函数,性能远高于tidyverse方案:
library(data.table) setDT(df1) df2 <- dcast(df1, Team_Code + Coef_Name + Year + Date ~ Stat_Name, value.var = "Adj_Stat_Value") # 如需转回普通data.frame,补充执行 setDF(df2) 即可
两种方案都会自动根据Stat_Name的取值生成对应宽表列,不需要手动指定450个统计名称的列名。
内容的提问来源于stack exchange,提问作者Lcsballer1
相关产品推荐
相关产品推荐

