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


Вы можете использовать один из двух методов для объединения нескольких фреймов данных в R:

Метод 1: используйте базу R

 #put all data frames into list
df_list <- list(df1, df2, df3)

#merge all data frames into 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 into list
df_list %>% reduce(full_join, by=' variable_name ')

Следующие примеры показывают, как использовать каждый метод на практике.

Метод 1: объединить несколько кадров данных с использованием базы 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *