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

jam*_*rta 10 grouping r data.table

我知道这可以通过其他软件包实现,但我正在努力data.table(因为它似乎是分组最快).

library(data.table)
dt = data.table(a=c(1,2,2,3))
dt[,length(a),by=a]
Run Code Online (Sandbox Code Playgroud)

结果是

   a V1
1: 1  1
2: 2  1
3: 3  1
Run Code Online (Sandbox Code Playgroud)

df = data.frame(a=c(1,2,2,3))
ddply(df,.(a),summarise,V1=length(a))
Run Code Online (Sandbox Code Playgroud)

产生

  a V1
1 1  1
2 2  2
3 3  1
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*ien 18

data.table方法是使用特殊变量.N,它跟踪当前组中的行数.(其他特殊变量包括.SD,.BY(在版本1.8.2中).I.GRP(从版本1.8.3开始).所有都记录在:)?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
Run Code Online (Sandbox Code Playgroud)

要查看您尝试的原因不起作用,请运行以下命令,检查每个浏览器提示符的值alength(a):

dt[, browser(), by = a]
Run Code Online (Sandbox Code Playgroud)