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

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

我的df看起来是这样的:


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重组并得到:


Id   A    B …  Z    

3    5    3      

4    4    6        

我试过:


df_wide <- dcast(df, Id + Task ~ Type, value.var="Freq")

得到了错误:


聚合函数缺失:默认为长度


我不知道该放什么进去fun.aggregate..有什么问题吗?


扬帆大鱼
浏览 4220回答 2
2回答

猛跑小猪

您收到此警告的原因是在fun.aggregate(见?dcast):如果变量没有标识每个输出单元格的单个观察,则需要聚合函数。默认为长度(带有消息)(如果需要但未指定)因此,当宽数据帧中的一个点有多个值时,就需要一个聚合函数。基于您的数据的解释:当你使用dcast(df, Id + Task ~ Type, value.var="Freq")你得到:&nbsp;&nbsp;Id&nbsp;Task&nbsp;A&nbsp;B1&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;2&nbsp;32&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;3&nbsp;03&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;3&nbsp;34&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;1&nbsp;3这是合乎逻辑的,因为对于每一个组合Id,&nbsp;Task和Type只有价值Freq..但是当你用dcast(df, Id ~ Type, value.var="Freq")您可以得到这个(包括一条警告消息):Aggregation&nbsp;function&nbsp;missing:&nbsp;defaulting&nbsp;to&nbsp;length &nbsp;&nbsp;Id&nbsp;A&nbsp;B1&nbsp;&nbsp;3&nbsp;2&nbsp;22&nbsp;&nbsp;4&nbsp;2&nbsp;2现在,回顾一下您的数据的顶部:Id&nbsp;&nbsp;Task&nbsp;Type&nbsp;&nbsp;&nbsp;&nbsp;Freq&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0你知道为什么会这样。的每一个组合Id和Type中有两个值Freq(ID 3:2和3为A&nbsp;&&nbsp;3和0用于类型B),虽然您只能在这个位置上放置一个值,但对于每个值,则只能将一个值放置在宽数据中。type..因此dcast希望将这些值聚合为一个值。默认的聚合函数是length,但是您可以使用其他聚合函数,如sum,&nbsp;mean,&nbsp;sd或自定义函数,方法是将它们指定为fun.aggregate.例如,用fun.aggregate = sum你得到:&nbsp;&nbsp;Id&nbsp;A&nbsp;B1&nbsp;&nbsp;3&nbsp;5&nbsp;32&nbsp;&nbsp;4&nbsp;4&nbsp;6现在没有警告,因为dcast被告知在有多个值时该做什么:返回值的和。

阿波罗的战车

例如,对于您使用的字符)使用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)&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP