2016-06-14 31 views
1

這裏是關於我想要的一個例子:如何選擇最小p值和下一個更接近最小data.table

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) 

我想什麼做的是選擇X的唯一行以最小的Y和下一接近值最小

所需的輸出

>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

假設你的數據frame是一個數據表,'data [rank(Y)%in%1:2']或者對於一個常規數據幀'data [rank(data $ Y)%in%1:2']'? – eipi10

+1

謝謝@ eipi10,我已經使用了'data [,.SD [rank(Y)%in%1:2],by = X]',並且它工作正常。如果你回答我的問題,我會給你信用:-) – user2380782

+0

啊,對不起,我錯過了你也被'X'分組的事實。隨意自己回答這個問題。回答你自己的問題沒有問題。 – eipi10

回答

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 
+0

謝謝,它的工作! – user2380782

+1

我的eponym的無恥插件:data.table也有'frank()'函數。以下是分組案例的標準參考:http://stackoverflow.com/a/16574176/ – Frank

+1

@Frank,我沒有意識到你發佈了你的名字「eff-rank」。 – eipi10