選擇每個組中的行
# 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