我没有使用data.table的经验,所以我不知道我的问题是否有解决方案(至少谷歌30分钟没有给出答案),但现在就这样了。
对于data.frame,我经常使用以下命令检查唯一值的观察次数:
df$Obs=with(df, ave(v1, ID-Date, FUN=function(x) length(unique(x))))
使用data.table时是否有相应的方法?
答案 0 :(得分:4)
是的,有。令人高兴的是,您已经询问了data.table
的最新功能,在v1.8.2中添加了:
现在已经实施了
:=
组(FR#1491)并将其分配给新列 现在通过引用自动添加列(用NA
初始化在哪里 分指定不触及)(FR#1997)。按组:=
可以与所有人合并i
的类型,因此:=
按群组包括i
以及by
的分组。 由于组中的:=
是引用的,因此它应该比任何组快得多 (直接或间接)cbind
分组结果到DT的方法,因为 根本没有制作(大)DT的副本。这是一种简短而自然的语法 可以与其他查询混在一起DT[,newcol:=sum(colB),by=colA]
在你的例子中,iiuc应该是这样的:
DT[, Obs:=.N, by=ID-Date]
而不是:
df$Obs=with(df, ave(v1, ID-Date, FUN=function(x) length(unique(x))))
请注意,按组显示:=
可以很好地适应大型数据集(较小的数据集也适用于很多小组)。