按组计算行数
# example data
DT = data.table(iris)
DT[, Bin := cut(Sepal.Length, c(4,6,8))]
使用 .N
j
中的 .N
存储子集中的行数。在探索数据时,.N
很方便……
-
计算组中的行数,
DT[Species == "setosa", .N] # 50
-
或计算所有组中的行数,
DT[, .N, by=.(Species, Bin)] # Species Bin N # 1: setosa (4,6] 50 # 2: versicolor (6,8] 20 # 3: versicolor (4,6] 30 # 4: virginica (6,8] 41 # 5: virginica (4,6] 9
-
或查找具有特定行数的组。
DT[, .N, by=.(Species, Bin)][ N < 25 ] # Species Bin N # 1: versicolor (6,8] 20 # 2: virginica (4,6] 9
处理缺少的组
但是,我们缺少计数为零的组。如果它们重要,我们可以使用基地的 table
:
DT[, data.table(table(Species, Bin))][ N < 25 ]
# Species Bin N
# 1: virginica (4,6] 9
# 2: setosa (6,8] 0
# 3: versicolor (6,8] 20
或者,我们可以加入所有团体:
DT[CJ(Species=Species, Bin=Bin, unique=TRUE), on=c("Species","Bin"), .N, by=.EACHI][N < 25]
# Species Bin N
# 1: setosa (6,8] 0
# 2: versicolor (6,8] 20
# 3: virginica (4,6] 9
关于 .N
的说明:
- 此示例在
j
中使用.N
,其中它指的是子集的大小。 - 在
i
中,它指的是总行数。