如何在 r 中修复:聚合函数缺失,默认为“length”
使用R时可能遇到的错误是:
Aggregation function missing: defaulting to length
当您使用reshape2包中的dcast函数将数据框从长格式转换为宽格式时,会出现此错误,但宽数据框的各个单元格中可以放置多个值。
以下示例展示了如何在实践中纠正此错误。
如何重现错误
假设我们在 R 中有以下数据框,其中包含有关各种产品销售的信息:
#create data frame
df <- data. frame (store=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
promotion=c('Y', 'Y', 'N', 'N', 'Y', 'Y', 'N', 'N'),
product=c(1, 2, 1, 2, 1, 2, 1, 2),
sales=c(12, 18, 29, 20, 30, 11, 15, 22))
#view data frame
df
store promotion product sales
1 AY 1 12
2 AY 2 18
3 YEAR 1 29
4 YEAR 2 20
5 BY 1 30
6 BY 2 11
7 BN 1 15
8 BN 2 22
现在假设我们尝试使用dcast函数将数据帧从长格式转换为宽格式:
library (reshape2)
#convert data frame to wide format
df_wide <- dcast(df, store ~ product, value. var = " sales ")
#view result
df_wide
Aggregation function missing: defaulting to length
store 1 2
1 to 2 2
2 B 2 2
请注意,dcast 函数可以工作,但我们收到聚合函数丢失警告消息。
如何修复错误
我们收到警告消息的原因是,对于商店和产品的每种组合,我们都有两个可以用于销售的潜在值。
例如,对于商店 A 和产品 1,销售额可能是 12 或 29。
因此dcast函数默认使用“length”作为其聚合函数。
例如,大型数据库告诉我们,对于商店 A 和产品 1,总共有2 个销售值。
如果您想使用不同的聚合函数,可以使用fun.aggregate 。
例如,我们可以使用以下语法来计算商店和产品的销售额总和:
library (reshape2)
#convert data frame to wide format
df_wide <- dcast(df, store ~ product, value. var = " sales ", fun. aggregate =sum)
#view result
df_wide
store 1 2
1 A 41 38
2 B 45 33
以下是如何解释大数据框中的值:
- 商店 A 和产品 1 的销售额之和为41 。
- 商店 A 和产品 2 的销售额之和为38 。
- 商店 B 和产品 1 的销售额之和为45 。
- 商店 B 和产品 2 的销售额之和为33 。
请注意,这次我们没有收到任何警告消息,因为我们使用了fun.aggregate参数。
其他资源
以下教程解释了如何修复 R 中的其他常见错误:
如何修复 R:意外的字符串常量
如何修复 R:ExtractVars 中的模板公式无效
如何在 R 中修复:参数既不是数字也不是逻辑:返回 na