选择每个组中的行

# 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