2016-04-20 2 views
0

Мне нужно объединить несколько данных с соответствующими значениями в столбце A. Каков наиболее эффективный способ сделать это и получить result.Слияние нескольких фреймов данных в R

df1

A B C 
2 x r 
1 c r 
3 y t 

df2

A D E 
3 e y 
1 t t 
2 y t 

DF3

A F G 
1 g y 
2 f y 
3 h k 

результат

A B C D E F G 
1 c r t t g y 
2 x r y t f y 
3 y t y t h k 
+0

Действительно ли это просто 'cbind' или вы ищете объединение общих значений, где не все значения' A' существуют во всех кадрах данных? – Gopala

+0

@Gopala Нет, я не хочу делать cbind. Я не уверен, что все dfs имеют одинаковое количество строк. – MAPK

+1

Интересно. Да, это очень хорошее решение, если у вас действительно есть список длин данных с переменной длиной. Благодарю вас за публикацию. – Gopala

ответ

1

Одно из решений заключается в использовании dplyr пакет, и это inner_join следующим образом:

library(dplyr) 
df <- inner_join(df1, df2) 
df <- inner_join(df, df3) 

Результирующий выход:

df 
    A B C D E F G 
1 2 x r y t f y 
2 1 c r t t g y 
3 3 y t e y h k 

Примечание, inner_join сохраняет только те строки, где A матчи.

Если вы хотите, расположены по столбцам A, вы можете добавить эту строку:

arrange(df, A) 
    A B C D E F G 
1 1 c r t t g y 
2 2 x r y t f y 
3 3 y t e y h k 

сливать список переменной длины кадров данных, представляется, уменьшить может быть полезно наряду с выше inner_join:

df <- Reduce(inner_join, list(df1, df2, df3)) 
arrange(df, A) 
    A B C D E F G 
1 1 c r t t g y 
2 2 x r y t f y 
3 3 y t e y h k 
+0

Спасибо, но слияние списка dataframe будет намного лучше. – MAPK

+0

Вы можете использовать «слияние» базового пакета, вложив в него слияния, поскольку я в основном вложенные слияния, используя 'inner_join'. Это будет медленнее. Не зная о каком-либо другом решении, но увидите, будут ли другие публиковать что-то другое. – Gopala

+0

Добавлена ​​опция 'Reduce' с' inner_join'. Не уверен, что это соответствует тому, что вы хотите. – Gopala