首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >dcast警告:‘聚合函数缺失:默认长度为’

dcast警告:‘聚合函数缺失:默认长度为’
EN

Stack Overflow用户
提问于 2015-10-10 15:17:09
回答 2查看 27.4K关注 0票数 25

我的df看起来像这样:

代码语言:javascript
复制
Id  Task Type    Freq  
3     1    A       2
3     1    B       3
3     2    A       3
3     2    B       0
4     1    A       3
4     1    B       3
4     2    A       1
4     2    B       3

我想按Id进行重构,并获得:

代码语言:javascript
复制
Id   A    B …  Z    
3    5    3      
4    4    6        

我试过了:

代码语言:javascript
复制
df_wide <- dcast(df, Id + Task ~ Type, value.var="Freq")

并收到以下警告:

缺少

聚合函数:默认为长度

我想不出该在fun.aggregate里放什么。有什么问题吗?

EN

回答 2

Stack Overflow用户

发布于 2015-10-10 15:35:10

您收到此警告的原因在于对fun.aggregate的描述(请参阅?dcast):

如果变量不能标识每个输出单元格的单个观测值,则需要

聚合函数。如果需要但未指定,则默认为长度(包含消息

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

根据你的数据一个解释:

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

代码语言:javascript
复制
  Id Task A B
1  3    1 2 3
2  3    2 3 0
3  4    1 3 3
4  4    2 1 3

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

代码语言:javascript
复制
Aggregation function missing: defaulting to length
  Id A B
1  3 2 2
2  4 2 2

现在,回过头来看看你的数据的顶部:

代码语言:javascript
复制
Id  Task Type    Freq  
3     1    A       2
3     1    B       3
3     2    A       3
3     2    B       0

你知道为什么会这样了吧。对于IdType的每个组合,Freq中都有两个值(对于Id 3:23对于A & 3,对于类型0对于B),而对于type的每个值,您只能将一个值放在宽数据帧中的此点。因此,dcast希望将这些值聚合为一个值。默认的聚合函数是length,但您可以使用summeansd等其他聚合函数,也可以使用fun.aggregate指定的自定义函数。

例如,使用fun.aggregate = sum时,您将获得:

代码语言:javascript
复制
  Id A B
1  3 5 3
2  4 4 6

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

票数 33
EN

Stack Overflow用户

发布于 2021-06-02 04:22:40

value.var列中的不同值对应于相同的值或值的组合出现在dcast公式的LHS上时,需要使用fun.aggregate。"Id"),通过公式的RHS中的变量组合(例如,"Type")。

dcast中默认为length()是信息性的,因为它

  • 可以建议数据中存在耦合,而
  • 可以定位可能需要注意的length > 1案例。

更具信息性的是使用函数list()作为fun.aggregate,因为它显示了每种情况下涉及的value.var值:

代码语言:javascript
复制
dcast(dt, Id ~ Type, fun.aggregate = list, value.var = 'Freq')

   Id   A   B
1:  3 2,3 3,0
2:  4 3,1 3,3

基本上,表格单元格的长度为1。因此,dcast中的默认情况可以通过修改公式或实现长度为1的汇总(聚合)来解决:运算符、自定义或可用函数,这些运算符、自定义或可用函数在每种情况下都会产生一个长度,并且适合于此目的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33051386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档