R语言多列长表转宽表报错求助:dcast提示缺少聚合函数
解决R语言data.table长表转宽表的问题
错误原因分析
你遇到的报错和结果不符问题,核心有三个问题:
- 公式方向错误:
dcast的语法逻辑是「行分组变量 ~ 列拆分变量」,你写的Con ~ Gr完全搞反了维度,应该把Bro和Gr作为行的分组依据,Con作为列的拆分维度 - 列名不匹配:原始数据里的频率列是
Freq,但代码里写的是Frequency,导致无法正确识别目标变量 - 缺失行分组变量:未将
Bro和Gr纳入行分组,无法生成你需要的行结构
正确代码实现
首先构造可复现的示例数据:
library(data.table) dt <- data.table( Con = c("Jp", "Jp", "Jp", "Jp", "Am", "Am", "Am", "Am"), Bro = c("CF", "CF", "CY", "CY", "CF", "CF", "CY", "CY"), Gr = c("ii", "ir", "im", "nm", "ii", "ir", "im", "nm"), N = c(578, 423, 1835, 808, 160, 106, 730, 2901), Freq = c(54.3, 45.7, 69.4, 30.6, 60.1, 39.9, 20.2, 79.8) )
执行正确的dcast语句:
result <- dcast(dt, Bro + Gr ~ Con, value.var = c("N", "Freq")) print(result)
输出结果
Bro Gr Jp_N Am_N Jp_Freq Am_Freq 1: CF ii 578 160 54.3 60.1 2: CF ir 423 106 45.7 39.9 3: CY im 1835 730 69.4 20.2 4: CY nm 808 2901 30.6 79.8
该结果完全匹配你期望的宽表结构。
内容的提问来源于stack exchange,提问作者Ollie
相关产品推荐
相关产品推荐

