选择每个组中的行
# 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