Jak scalić wiele ramek danych w r (z przykładami)


Możesz użyć jednej z dwóch metod, aby połączyć wiele ramek danych w R:

Metoda 1: Użyj podstawy 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)

Metoda 2: Użyj 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 ')

Poniższe przykłady pokazują, jak zastosować każdą metodę w praktyce.

Metoda 1: Scal wiele ramek danych przy użyciu podstawy R

Załóżmy, że w R mamy następujące ramki danych:

 #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))

Możemy użyć następującej składni, aby połączyć wszystkie ramki danych za pomocą funkcji podstawowych języka 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

Należy pamiętać, że każda wartość „id” z każdego oryginalnego bloku danych jest zawarta w końcowym bloku danych.

Metoda 2: Scal wiele ramek danych za pomocą Tidyverse

Załóżmy, że w R mamy następujące ramki danych:

 #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))

Możemy użyć następującej składni, aby połączyć wszystkie ramki danych za pomocą funkcji z Tidyverse – zbioru pakietów przeznaczonych do analityki danych w 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

Należy pamiętać, że ostateczna ramka danych odpowiada ramce danych, którą utworzyliśmy przy użyciu pierwszej metody.

Uwaga : podejście Tidyverse będzie zauważalnie szybsze, jeśli pracujesz z bardzo dużymi ramkami danych.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe funkcje w R:

Jak scalić ramki danych na podstawie wielu kolumn w R
Jak układać kolumny ramek danych w R
Jak używać anti_join w R

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *