Як об’єднати кілька кадрів даних у r (з прикладами)


Ви можете використовувати один із двох методів для об’єднання кількох кадрів даних у R:

Спосіб 1: Використовуйте Base 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: об’єднання кількох кадрів даних за допомогою 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

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *