選擇每個組中的行

# example data
DT <- data.table(Titanic)

假設,對於每個性別,我們想要具有最高生存數的行:

DT[Survived == "Yes", .SD[ N == max(N) ], by=Sex]

#    Class    Sex   Age Survived   N
# 1:  Crew   Male Adult      Yes 192
# 2:   1st Female Adult      Yes 140

.SD 是與每個 Sex 相關的資料子集; 我們將這個進一步分類到符合我們條件的行。如果速度很重要,請使用 eddi 在 SO 上建議的方法

DT[ DT[Survived == "Yes", .I[ N == max(N) ], by=Sex]$V1 ]

#    Class    Sex   Age Survived   N
# 1:  Crew   Male Adult      Yes 192
# 2:   1st Female Adult      Yes 140

陷阱

在最後一行程式碼中,.I 指的是完整 data.table 的行號。但是,當沒有 by 時,情況並非如此

DT[ Survived == "Yes", .I]

# 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16

DT[ Survived == "Yes", .I, by=Sex]$I

# 17 18 19 20 25 26 27 28 21 22 23 24 29 30 31 32