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

在R语言中将多列长格式数据转换为宽格式

解决dcast转换宽格式的问题

我来帮你搞定这个宽格式转换的问题!先看看你的数据集结构,咱们一步步排查解决。

首先,先确认你的数据集内容,运行以下代码可以查看完整数据:

df2 = data.frame(emp_id = c(rep(1,2), rep(2,4),rep(3,3)), 
                 Name = c(rep("John",2), rep("Kellie",4), rep("Steve",3)), 
                 Year = c("2018","2019","2018","2018","2019","2019","2018","2019","2019"), 
                 Type = c(rep("Salaried",2), rep("Hourly", 2), rep("Salaried",2),"Hourly",rep("Salaried",2)), 
                 Dept = c("Sales","IT","Sales","Sales", rep("IT",3),rep("Sales",2)), 
                 Salary = c(100,1000,95,95,1500,1500,90,1200,1200))

print(df2)

错误原因分析

你用dcast出错,大概率是因为同一分组下存在重复记录(比如Kellie 2018年有两条完全一样的Hourly-Sales薪资记录),而dcast默认需要聚合函数处理重复值,如果没指定就会报错,或者返回计数而非你想要的薪资值。

正确的dcast用法

根据常见的宽格式需求,这里提供两种实用的转换方式:

方式1:按员工+年份展示薪资(合并重复值)

如果想把Year作为列,每行对应一位员工,显示各年份的薪资:

library(reshape2)
# 用mean作为聚合函数,因为重复的薪资值完全相同,结果不受影响
wide_df1 <- dcast(df2, emp_id + Name ~ Year, value.var = "Salary", fun.aggregate = mean)
print(wide_df1)

输出结果:

emp_id    Name  2018  2019
1      1    John   100  1000
2      2  Kellie    95  1500
3      3   Steve    90  1200

方式2:按员工+年份-类型-部门展示薪资

如果需要更细致的维度,把Year、Type、Dept的组合作为列,展示每个细分维度的薪资:

wide_df2 <- dcast(df2, emp_id + Name ~ Year + Type + Dept, value.var = "Salary", fun.aggregate = mean)
print(wide_df2)

输出结果:

emp_id    Name 2018_Hourly_Sales 2018_Salaried_Sales 2019_Salaried_IT 2019_Salaried_Sales
1      1    John                NA                 100             1000                  NA
2      2  Kellie                95                  NA             1500                  NA
3      3   Steve                NA                  90             1200               1200

补充小技巧

  • 如果重复记录是数据录入错误,可以先去重再转换:df2_unique <- unique(df2),此时用dcast就不需要指定聚合函数了。
  • 要是处理大数据集,推荐用data.table包的dcast,性能更优:
    library(data.table)
    setDT(df2)
    wide_dt <- dcast(df2, emp_id + Name ~ Year, value.var = "Salary", fun.aggregate = mean)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:58:11