2013-08-02 30 views
1

假設你有一個數據幀如下:的R - 查找部分匹配的元組

column1 column2 column3 column4 
    1  124   2   a 
    2  125   4   b 
    3  124   6   c 
    4  126   8   d 
    5  150   10   e 

什麼是最有效的(即最快)的方法,只是找出(TRUE/FALSE)如果數據幀包含任何滿足僅基於兩列的條件的元組?

,你會如何去找出(W/O環路),如果有滿足條件column1==1 & column2<140 & column2>130一個元組? (當然,結果將不得不在這樣的情況下返回FALSE)。

回答

4

由於@Tomas指出的 - 你幾乎有:

any(df$column1==1 & df$column2<140 & df$column2>130) 
#[1] FALSE 

或...

with(df,any(column1==1 & column2<140 & column2>130)) 
#[1] FALSE 
+0

+1使用的 「任何」 功能 - didn't知道這件事!很有用! – whistler

+0

+1與'any'優雅的解決方案,這個答案很可能是更準確地適用於這個問題。 – TMS

2

幾乎完全一樣,你寫道:

df[df$column1==1 & df$column2<140 & df$column2>130,] 

with(df, df[column1==1 & column2<140 & column2>130,]) 
2

或者使用data.tablebetween語法糖:

library(data.table) 
DT <- data.table(dat) 
DT[column1==1 & column2 %between% c(130,140)] 
+0

agstudy,你必須使用'$ DT column1',對不對?或者這是另一種「語法糖」? :-) – TMS

+0

@Tomas - 'data.table'的允許您訪問變量沒有'$'符號。 – thelatemail

+0

有趣!在標準R中會喜歡這個,因爲不得不一遍又一遍地寫'df $'是無止境的。 +1語法糖! – TMS