- 已编辑
如何对数据DT按ID和id分组,并挑出每组中b值最大的前两个观测,并保持观测在原有数据框中出现的顺序?我暂时还办不到保持顺序这一点,代码如下:
library(data.table)
# 原始数据 DT
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
#> ID id a b c
#> 1: b A 1 10 13
#> 2: b A 2 100 14
#> 3: b B 3 2 15
#> 4: a A 4 3 16
#> 5: a C 5 50 17
#> 6: c C 6 500 18
#> 7: b A 7 20 19
# 目前的排序方法,无法保持观测出现顺序和原始的一致
DT[order(-b),.SD[1:2],by=list(ID,id)][!is.na(b)]
#> ID id a b c
#> 1: c C 6 500 18
#> 2: b A 2 100 14
#> 3: b A 7 20 19
#> 4: a C 5 50 17
#> 5: a A 4 3 16
#> 6: b B 3 2 15
```
<sup>Created on 2020-07-19 by the [reprex package](https://reprex.tidyverse.org) (v0.3.0)</sup>
`