为了账号安全,请及时绑定邮箱和手机立即绑定

dcast错误:“聚合函数缺失:默认为长度”

dcast错误:“聚合函数缺失:默认为长度”

扬帆大鱼 2019-07-16 10:29:40
dcast错误:“聚合函数缺失:默认为长度”我的df看起来是这样的:Id  Task Type    Freq  3     1    A       23     1    B       33     2    A       33     2    B       04     1    A       34     1    B       34     2    A       14     2    B       3我想通过ID重组并得到:Id   A    B …  Z    3    5    3      4    4    6        我试过:df_wide <- dcast(df, Id + Task ~ Type, value.var="Freq")得到了错误:聚合函数缺失:默认为长度我不知道该放什么进去fun.aggregate..有什么问题吗?
查看完整描述

2 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

您收到此警告的原因是在fun.aggregate(见?dcast):

如果变量没有标识每个输出单元格的单个观察,则需要聚合函数。默认为长度(带有消息)(如果需要但未指定)

因此,当宽数据帧中的一个点有多个值时,就需要一个聚合函数。

基于您的数据的解释:

当你使用dcast(df, Id + Task ~ Type, value.var="Freq")你得到:

  Id Task A B1  3    1 2 32  3    2 3 03  4    1 3 34  4    2 1 3

这是合乎逻辑的,因为对于每一个组合IdTaskType只有价值Freq..但是当你用dcast(df, Id ~ Type, value.var="Freq")您可以得到这个(包括一条警告消息):

Aggregation function missing: defaulting to length
  Id A B1  3 2 22  4 2 2

现在,回顾一下您的数据的顶部:

Id  Task Type    Freq  
3     1    A       23     1    B       33     2    A       33     2    B       0

你知道为什么会这样。的每一个组合IdType中有两个值Freq(ID 3:23A & 30用于类型B),虽然您只能在这个位置上放置一个值,但对于每个值,则只能将一个值放置在宽数据中。type..因此dcast希望将这些值聚合为一个值。默认的聚合函数是length,但是您可以使用其他聚合函数,如summeansd或自定义函数,方法是将它们指定为fun.aggregate.

例如,用fun.aggregate = sum你得到:

  Id A B1  3 5 32  4 4 6

现在没有警告,因为dcast被告知在有多个值时该做什么:返回值的和。


查看完整回答
反对 回复 2019-07-16
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

例如,对于您使用的字符)使用toString-发挥汇总作用:dcast(df, Id ~ Type, value.var="Freq", fun.aggregate = toString)..或者,您也可以定义自己的聚合函数-例如:f.agg <- function(x) paste(x, collapse = "-")-并使用:dcast(df, Id ~ Type, value.var="Freq", fun.aggregate = f.agg) 

查看完整回答
反对 回复 2019-07-16
  • 2 回答
  • 0 关注
  • 4370 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信