Как я могу объединить список фреймов данных разных размеров, соответствующих значениям столбцов - PullRequest
0 голосов
/ 28 июня 2018

Я нашел ответы на некоторые вопросы, но не смог найти именно то, что мне нужно здесь. У меня есть список фреймов данных с именем test с разными именами столбцов, но они имеют соответствующий ключевой столбец. Я хочу объединить все кадры данных на основе значений key и получить следующий результат:

test<- list(structure(list(key = structure(c(2L, 3L, 1L), .Label = c("Datsun 710", 
"Mazda RX4", "Mazda RX4 Wag"), class = "factor"), mpg1 = c(23, 
22, 2.8), cyl1 = structure(c(2L, 2L, 1L), .Label = c("4", "6", 
"8"), class = "factor")), .Names = c("key", "mpg1", "cyl1"), row.names = c(NA, 
3L), class = "data.frame"), structure(list(key = structure(2L, .Label = c("Datsun 710", 
"Mazda RX4", "Mazda RX4 Wag"), class = "factor"), mpg2 = 21, 
    cyl2 = structure(2L, .Label = c("4", "6", "8"), class = "factor")), .Names = c("key", 
"mpg2", "cyl2"), row.names = 1L, class = "data.frame"), structure(list(
    key = structure(c(3L, 1L), .Label = c("Datsun 710", "Mazda RX4", 
    "Mazda RX4 Wag"), class = "factor"), mpg3 = c(42, 32.8), 
    cyl3 = structure(c(2L, 1L), .Label = c("4", "6", "8"), class = "factor")), .Names = c("key", 
"mpg3", "cyl3"), row.names = 2:3, class = "data.frame"))

результат, который я хочу:

key              mpg1      cyl1     mpg2    cyl2    mpg3    cyl3
Mazda RX4       23          6        21       6     
Mazda RX4 Wag   22          6                         42      6
Datsun 710      2.8         4                         32.8    4

1 Ответ

0 голосов
/ 28 июня 2018

Мы можем использовать reduce с full_join

library(tidyverse)
test %>% 
      reduce(full_join, by = 'key')
#            key mpg1 cyl1 mpg2 cyl2 mpg3 cyl3
#1     Mazda RX4 23.0    6   21    6   NA <NA>
#2 Mazda RX4 Wag 22.0    6   NA <NA> 42.0    6
#3    Datsun 710  2.8    4   NA <NA> 32.8    4

Или с base R

Reduce(function(...) merge(..., all = TRUE, by = "key"), test)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...