按组在data.table中创建新列

时间:2012-09-27 12:02:23

标签: r vector data.table

我没有使用data.table的经验,所以我不知道我的问题是否有解决方案(至少谷歌30分钟没有给出答案),但现在就这样了。

对于data.frame,我经常使用以下命令检查唯一值的观察次数:

df$Obs=with(df, ave(v1, ID-Date, FUN=function(x) length(unique(x))))  

使用data.table时是否有相应的方法?

1 个答案:

答案 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))))

请注意,按组显示:=可以很好地适应大型数据集(较小的数据集也适用于很多小组)。

请参阅?":="Search data.table tag for "reference"