library(data.table)
DT<-data.table(
ID=c("b","b","b","a","a","c",'b'),
id=c('A','A','B','A','C','C','A'),
a=1:7,b=c(10,100,2,3,50,500,20),c=13:19)
DT[sort(DT[order(-b),head(.I,2),by = .(ID,id)]$V1)]
#> ID id a b c
#> 1: b A 2 100 14
#> 2: b B 3 2 15
#> 3: a A 4 3 16
#> 4: a C 5 50 17
#> 5: c C 6 500 18
#> 6: b A 7 20 19
稍微解释一下,
DT[order(-b),head(.I,2),by = .(ID,id)]$V1
#> [1] 6 2 7 5 4 3
在data.table
中使用head
可以自动去除NA
以上代码的结果是符合条件的原row number,即第6,2,7,5,4,3行
再加一个sort即让它恢复原始的顺序