按組計算行數

# example data
DT = data.table(iris)
DT[, Bin := cut(Sepal.Length, c(4,6,8))]

使用 .N

j 中的 .N 儲存子集中的行數。在探索資料時,.N 很方便……

  1. 計算組中的行數,

    DT[Species == "setosa", .N]
    
    # 50
    
  2. 或計算所有組中的行數,

    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
    
  3. 或查詢具有特定行數的組。

    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 中,它指的是總行數。