如何获取data.table分组中当前组的长度?

时间:2012-11-02 13:34:11

标签: r data.table grouping

我知道这可以通过其他软件包来实现,但我试图在data.table中进行(因为它似乎是分组最快的。)

library(data.table)
dt = data.table(a=c(1,2,2,3))
dt[,length(a),by=a]

结果

   a V1
1: 1  1
2: 2  1
3: 3  1

,而

df = data.frame(a=c(1,2,2,3))
ddply(df,.(a),summarise,V1=length(a))

产生

  a V1
1 1  1
2 2  2
3 3  1

这是一个更明智的结果。只是想知道为什么data.table没有给出相同的结果,以及如何实现这一目标。

1 个答案:

答案 0 :(得分:17)

data.table方法是使用特殊变量.N,它跟踪当前组中的行数。 (其他特殊变量包括.SD.BY(版本1.8.2)和.I以及.GRP(可从1.8.3版本获得)。所有变量都记录在{{ 1}}):

?data.table

要查看您尝试的原因无效,请运行以下命令,在每个浏览器提示符处检查library(data.table) dt = data.table(a=c(1,2,2,3)) dt[, .N, by = a] # a N # 1: 1 1 # 2: 2 2 # 3: 3 1 a的值:

length(a)