2013-08-02 3 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), если кадр данных содержит какой-либо кортежи, удовлетворяющие условиям, основанным только на двух столбцах?

Как бы вы узнали (без петли), если есть кортеж, который удовлетворяет условиям 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 за использование "любой" функции - не знал, об этом! Очень полезно! – 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.table и between синтаксического сахара:

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

Смежные вопросы