Как объединить несколько фреймов данных в R (с примерами)


Вы можете использовать один из следующих двух методов для объединения нескольких фреймов данных в 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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.