2017-01-10 2 views
1

У меня проблемы с sem_join от dplyr. В идеале я хотел бы сделать полу-соединение на dfA против dfB. dfA имеет повторяющиеся значения, а также dfB. Я хочу отменить все значения из dfA, которые имеют любые совпадения с dfB, даже дубликаты в dfA.sem_join in R, но дублировать дубликаты

dfA    dfB    >>  dfC 
x y z  x g     x y z 
1 r 5  1 lkm     1 r 5 
1 b 4  1 pok     1 b 4 
2 4 e  2 jij     2 4 e 
3 5 r  2 pop     3 5 r 
3 9 g  3 hhg     3 9 g 
4 3 0  5 trt 

Что я хотел бы получить, это вывод dfC выше. Потому что, по крайней мере один матч х, он тянет назад все иксы в DFA

semi_join(dfA, dfB, by = "x") 
dfC 
x y z 
1 r 5 
2 4 e 
3 5 r 


inner_join(dfA, dfB, by = "x") 
x y z g 
1 r 5 lkm 
1 r 5 pok 
1 b 4 lkm 
1 b 4 pok 
2 4 e jij 
2 4 e pop 
3 5 r hhg 
3 9 g hhg 

Ни один из которых дал мне правильный результат. Любая помощь будет замечательной! Заранее спасибо

+1

'DFA [dfA $ x% in% dfB $ x,] ' –

ответ

2

не знаю, почему вам нужно join: просто использовать% в%

library(data.table) 
setDT(dfA)[x %in% dfB$x,] 

# simple base R approach : 
dfA[dfA$x %in% dfB$x,] 
+4

не уверен, зачем вам нужны данные. таблица: просто используйте base –

+0

haha ​​!! Я согласен, что @docendodiscimus только что использовал его –

+0

Спасибо @ joel.wilson - Я все еще новичок в обучении R, поэтому я использую то, что знаю на данный момент. Ваше решение сработало, но оно также соответствовало моему решению semi_join. На sem_join он не отбрасывает дубликаты всей строки? или дубликаты ключей? Я беспокоился, что это был ключ, но, похоже, из этого примера это дубликаты целых строк. Если да, мой пример выше неправильный. –

1

если вы используете dplyr и будет держать его прохождения вниз по трубе

library(dplyr) 
dfA %>% filter(x %in% dfB$x) 
+1

Это тоже работает! Спасибо. Я ценю помощь –

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