如何获得当前组的长度data.table分组?(How to get length of curre

2019-08-02 06:14发布

我知道这是可以使用其他软件包来实现,但我试图做到这一点在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没有给予同样的结果,以及如何可以做到这一点。

Answer 1:

该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

要知道为什么你试过没有工作,运行以下,检查的价值alength(a)在每个浏览器的提示:

dt[, browser(), by = a]


文章来源: How to get length of current group in data.table grouping?