Вы можете использовать один из следующих двух методов для объединения нескольких фреймов данных в R:
Метод 1: используйте базу R
#put all data frames into list
df_list <- list(df1, df2, df3)
#merge all data frames in list
Reduce(function(x, y) merge(x, y, all= TRUE ), df_list)
Способ 2: Используйте Tidyverse
library (tidyverse)
#put all data frames into list
df_list <- list(df1, df2, df3)
#merge all data frames in list
df_list %>% reduce(full_join, by='variable_name')
В следующих примерах показано, как использовать каждый метод на практике.
Метод 1: объединить несколько фреймов данных с помощью Base R
Предположим, у нас есть следующие фреймы данных в R:
#define data frames
df1 <- data.frame(id=c(1, 2, 3, 4, 5),
revenue=c(34, 36, 40, 49, 43))
df2 <- data.frame(id=c(1, 2, 5, 6, 7),
expenses=c(22, 26, 31, 40, 20))
df3 <- data.frame(id=c(1, 2, 4, 5, 7),
profit=c(12, 10, 14, 12, 9))
Мы можем использовать следующий синтаксис для объединения всех фреймов данных с помощью функций из базы R:
#put all data frames into list
df_list <- list(df1, df2, df3)
#merge all data frames together
Reduce(function(x, y) merge(x, y, all= TRUE ), df_list)
id revenue expenses profit
1 1 34 22 12
2 2 36 26 10
3 3 40 NA NA
4 4 49 NA 14
5 5 43 31 12
6 6 NA 40 NA
7 7 NA 20 9
Обратите внимание, что каждое из значений «id» из каждого исходного фрейма данных включается в окончательный фрейм данных.
Способ 2: объединить несколько фреймов данных с помощью Tidyverse
Предположим, у нас есть следующие фреймы данных в R:
#define data frames
df1 <- data.frame(id=c(1, 2, 3, 4, 5),
revenue=c(34, 36, 40, 49, 43))
df2 <- data.frame(id=c(1, 2, 5, 6, 7),
expenses=c(22, 26, 31, 40, 20))
df3 <- data.frame(id=c(1, 2, 4, 5, 7),
profit=c(12, 10, 14, 12, 9))
Мы можем использовать следующий синтаксис для объединения всех фреймов данных с помощью функций из tidyverse — набора пакетов, разработанных для обработки данных в R:
library (tidyverse)
#put all data frames into list
df_list <- list(df1, df2, df3)
#merge all data frames together
df_list %>% reduce(full_join, by='id')
id revenue expenses profit
1 1 34 22 12
2 2 36 26 10
3 3 40 NA NA
4 4 49 NA 14
5 5 43 31 12
6 6 NA 40 NA
7 7 NA 20 9
Обратите внимание, что окончательный фрейм данных совпадает с фреймом данных, который мы создали с помощью первого метода.
Примечание.Подход tidyverse будет заметно быстрее, если вы работаете с очень большими фреймами данных.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные функции в R:
Как объединить фреймы данных на основе нескольких столбцов в R
Как сложить столбцы фрейма данных в R
Как использовать anti_join в R