我的 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")
并收到以下警告:Aggregation function missing: defaulting to length
我不知道在
fun.aggregate
中放什么.有什么问题?
最佳答案
您收到此警告的原因在 fun.aggregate
的描述中。 (见 ?dcast
):
aggregation function needed if variables do not identify a single observation for each output cell. Defaults to length (with a message) if needed but not specified
因此,当宽数据帧中的一个点有多个值时,需要一个聚合函数。
基于您的数据的解释:
当您使用
dcast(df, Id + Task ~ Type, value.var="Freq")
你得到: Id Task A B
1 3 1 2 3
2 3 2 3 0
3 4 1 3 3
4 4 2 1 3
这是合乎逻辑的,因为对于
Id
的每个组合, Task
和 Type
只有 Freq
中的值.但是当你使用 dcast(df, Id ~ Type, value.var="Freq")
你得到这个(包括警告信息):Aggregation function missing: defaulting to length
Id A B
1 3 2 2
2 4 2 2
现在,回顾一下数据的顶部:
Id Task Type Freq
3 1 A 2
3 1 B 3
3 2 A 3
3 2 B 0
你明白为什么会这样。对于
Id
的每个组合和 Type
Freq
中有两个值(对于 Id 3: 2
和 3
用于 A
和 3
和 0
用于类型 B
)而您只能在此位置为 type
的 6 个宽数据帧中的每个值放置一个值 |177914 | .因此 dcast
想要将这些值聚合为一个值。默认聚合函数为 length
,但您可以使用其他聚合函数,例如 sum
, mean
, sd
或通过使用 fun.aggregate
指定它们来自定义函数.例如,使用
fun.aggregate = sum
你得到: Id A B
1 3 5 3
2 4 4 6
现在没有警告,因为
dcast
被告知当有多个值时该怎么做:返回值的总和。
关于r - dcast 警告 : ‘Aggregation function missing: defaulting to length’ ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33051386/