这是一个关于我想要的例子:
set.seed(123)
data<-data.frame(X=rep(letters[1:3], each=4),Y=sample(1:12,12),Z=sample(1:100, 12))
setDT(data)
我想要做的是选择具有最小Y的唯一X行,并将下一个更接近的值选择为最小值
期望的输出
>data
a 4 68
a 5 11
b 1 4
b 10 89
c 2 64
c 3 82
这篇文章How to select rows by group with the minimum value and containing NAs in R
已经回答了最小值data[, .SD[which.min(Y)], by=X]
但是如何用最小和更近的方式做到这一点?
答案 0 :(得分:3)
对于未分组的情况,对于data.table,您可以这样做:
data[rank(Y) %in% 1:2, ]
对于分组案例,您可以执行以下操作:
data[ , .SD[rank(Y) %in% 1:2] , by=X]
X Y Z 1: a 4 68 2: a 5 11 3: b 1 4 4: b 10 89 5: c 3 82 6: c 2 64