按组在data.table中创建新列

ego*_*go_ 3 r vector data.table

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

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

df$Obs=with(df, ave(v1, ID-Date, FUN=function(x) length(unique(x))))  
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*wle 5

就在这里。令人高兴的是,您询问了data.tablev1.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]
Run Code Online (Sandbox Code Playgroud)

代替 :

df$Obs=with(df, ave(v1, ID-Date, FUN=function(x) length(unique(x))))
Run Code Online (Sandbox Code Playgroud)

请注意,:=按组可很好地缩放大型数据集(较小的数据集将包含许多小型组)。

查看?":="搜索data.table标记以获取“参考”