2016-08-23 3 views
1

Я хочу, чтобы объединить два фрейма данных, как показано ниже на основе значения столбца первого кадра данных:Как объединить два кадра данных по строкам на основе значения столбца первого кадра данных в R?

FIRST DATA FRAME : 
a b c d 
2 # # # 
3 # # # 

SECOND DATA FRAME : 
a b c d 
1 @ @ @ 
2 @ @ @ 
3 @ @ @ 
4 @ @ @ 
5 @ @ @ 

значений, отличных от «а» не имеет значения столбцов. Выход должен быть как:

a b c d 
2 # # # 
3 # # # 
2 @ @ @ 
3 @ @ @ 

Я попытался слияния, соединяет в dplyr, пересекаются т.д., но не смогли получить правильные результаты.

ответ

2

Я хотел бы попробовать что-то просто с rbind

rbind(df1, df2[df2$a %in% df1$a, ]) 
+0

Это не будет работать, если 'df1' имеет дополнительный ряд, который не присутствует в' df2' –

3

Один из способов, используя rbind и intersect. intersect обнаружит общие элементы между df1$a и df2$a.

common <- intersect(df1$a, df2$a) 
rbind(df1[df1$a %in% common, ], df2[df2$a %in% common, ], make.row.names = F) 

#a b c d 
#2 # # # 
#3 # # # 
#2 @ @ @ 
#3 @ @ @ 
+0

Был как раз собирался ударить «пост»:) – Sotos

+0

Ох .... происходит со всеми в SO :) –

3

Я думаю, еще один для разнообразия:

subset(rbind(df1, df2), a %in% a[duplicated(a)]) 
# a b c d 
#1 2 # # # 
#2 3 # # # 
#4 2 @ @ @ 
#5 3 @ @ @