Как сложить единый фрейм данных из списка фреймов данных - PullRequest
2 голосов
/ 28 мая 2020

У меня есть список фреймов данных, из которых я хочу собрать столбцы. Чтобы проиллюстрировать здесь фиктивный набор:

Data1 <- data.frame(A = c(1, 2, 3, 4, 5),
                    B = c(2, 3, 5, 3, 10))
Data2 <- data.frame(A = c(1, 2, 3, 4, 6), 
                    C = c(3, 4, 8, 12, 2))
Data3 <- data.frame(A = c(1, 2, 3, 4, 6), 
                    D = c(4, 3, 1, 9, 2))
list <- list(Data1, Data2, Data3)

Я хочу, чтобы результат выглядел так:

A  B  C  D
1  2  3  4
2  3  4  3
3  5  8  1
4  3 12  9
5 10 NA NA
6 NA  2  2

Мои настоящие данные имеют много фреймов данных внутри списка, и у меня много списков, поэтому я бы хотел, чтобы в коде не указывались явно имена фреймов данных, что я делал с помощью функции merge ().

Спасибо!

1 Ответ

2 голосов
/ 28 мая 2020

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

library(dplyr)
library(purrr)
reduce(list, full_join, by = 'A')

Если их много list, поместите их все в list, l oop поверх list, а затем используйте reduce

map(list(list1, list2, list3, ..., listn), ~ reduce(.x, full_join, by = 'A'))

Размещение list в list можно автоматизировать с помощью mget

map(mget(ls(pattern = '^list\\d+$')), ~ reduce(.x, full_join, by = 'A'))

Здесь мы предполагаем имена list s как list1, list2, и т. д. c.

...