如何在 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

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注