我的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
中的内容。有什么问题?
答案 0 :(得分:0)
fun.aggregate
当inside value.var
列对应的相同 值 - 或值的组合 - 出现在 { 的 LHS 上时,需要
dcast
{1}} 公式(例如“Id”),通过公式 RHS 中变量的组合(例如“类型”)强制进入一个单元格。
在 length()
中默认为 dcast
提供了丰富的信息
length > 1
个案例。使用函数 list()
作为 fun.aggregate
可以提供更多信息,因为它显示了每种情况下涉及哪些 value.var
值:
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
中的默认情况可以通过修改公式或通过实现长度为一的汇总(聚合)来解决:运算符、自定义或可用函数在每种情况下给出一个长度为一的结果并且适合该目的。