2015-09-01 8 views
0

Например, у меня есть dataframe -как я могу фильтровать фрейм данных на основе значений столбца в другом фрейме данных в R?

ad 

key value 
ab  1 
bc  2 
cd  3 

ad1 

key QS IS LISR Group version 
ab 7 23 77 2 1.2 
bc 7 30 70 1 1.5 
cd 8 40 60 2 1.4 
de 6 12 88 3 1.7 
ef 3 23 77 4 1.2 
fg 2 34 66 2 1.4 

Результат должен be--

result 

key QS IS LISR Group version 
ab 7 23 77 2 1.2 
bc 7 30 70 1 1.5 
cd 8 40 60 2 1.4 

Я нашел несколько примеров, но это для маленьких dataframes, оба моих dataframes велики!

Попытка написать запрос, но не сработала? Как вы могли это решить?

спасибо!

+1

Попробуйте 'подмножество (AD1, ключ% в% рекламного $ ключа)' – akrun

+0

должен ли значение столбца, чтобы иметь какое-либо влияние на выходе? – maj

+0

Извините, что имя столбца отличается от данных в кадре данных, однако оно было разработано с вашим предложением (я просто изменил имена столбцов). Результат <- (ad1, key1% in% ad $ key) – rrsa

ответ

3

Мы можем использовать %in% и subset для подмножества строк в «ad1» на основе столбцов «ключ» в обоих наборах данных.

subset(ad1, key %in% ad$key) 
# key QS IS LISR Group version 
#1 ab 7 23 77  2  1.2 
#2 bc 7 30 70  1  1.5 
#3 cd 8 40 60  2  1.4 

Или другой вариант join от data.table. В версии devel мы можем использовать on. Мы преобразуем 'data.frame' в 'data.table' (setDT(ad1)) и присоединяемся к набору данных 'ad'.

library(data.table)#v1.9.5+ 
setDT(ad1)[ad['key'], on='key'] 
# key QS IS LISR Group version 
#1: ab 7 23 77  2  1.2 
#2: bc 7 30 70  1  1.5 
#3: cd 8 40 60  2  1.4 
1

Это также работает:

ad1[which(ad1$key %in% ad$key),] 
+0

это тоже работает .. спасибо! – rrsa

+0

«Господь дал, и Господь спасся». (С: – ulfelder