You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言:如何高效实现DataFrame按分组转置生成宽格式数据?

高效将长格式DataFrame转为宽格式的R实现方法

你当前用split逐行生成宽格式的方式效率太低,以下是几种更高效简便的实现方案,完全匹配你的目标格式:

方法1:tidyr包的pivot_wider(代码简洁,tidyverse生态)

pivot_wider是tidyverse专门用于长转宽的函数,直接通过参数设置就能完成缺失值填充:

library(tidyr)

wide_df <- pivot_wider(df,
                       id_cols = group,    # 作为行标识的列
                       names_from = year,  # 要转为列名的变量
                       values_from = amount,# 对应列值的变量
                       values_fill = 0)    # 缺失年份填充0

# 输出结果
wide_df

方法2:data.table包的dcast(大数据场景下效率最优)

如果你的数据量较大,data.table的dcast在速度上会有明显优势:

library(data.table)

# 转换为data.table对象
dt <- as.data.table(df)

# 长转宽,fill参数设置缺失值为0
wide_dt <- dcast(dt, group ~ year, value.var = "amount", fill = 0)

# 如需转回data.frame格式
wide_df <- as.data.frame(wide_dt)

方法3:Base R原生reshape函数(无需额外安装包)

不想加载第三方包的话,用base R的reshape也能实现,只需后续补全缺失值和调整列名:

wide_df <- reshape(df,
                   idvar = "group",
                   timevar = "year",
                   direction = "wide",
                   v.names = "amount")

# 将NA替换为0,去掉列名中的"amount."前缀
wide_df[is.na(wide_df)] <- 0
colnames(wide_df) <- gsub("amount\\.", "", colnames(wide_df))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:05:07