Существует классический подход , как объединить несколько фреймов данных в списке .
Вывод, однако, несколько неупорядочен.
Пример
> L
[[1]]
a b c d e
1 5 2 4 10 1
[[2]]
a b c d e
1 6 7 4 6 1
[[3]]
a b c d
1 7 3 5 5
[[4]]
a b c d
1 5 2 6 5
[[5]]
a b c d
1 4 4 2 8
Строки вывода Reduce(.)
упорядочены по 5, 1, 4, 2, 3, что может означать, что сокращение работает как-то изснаружи внутрь.
> Reduce(function(...) merge(..., all=TRUE), L)
> Reduce(function(x, y) merge(x, y, all=TRUE, by=intersect(names(x), names(y))), L) # same
a b c d e
1 4 4 2 8 NA
2 5 2 4 10 1
3 5 2 6 5 NA
4 6 7 4 6 1
5 7 3 5 5 NA
В любом случае, есть ли способ немного изменить код, чтобы получить упорядоченный вывод, подобный приведенному ниже?
# a b c d e
# 1 5 2 4 10 1
# 2 6 7 4 6 1
# 3 7 3 5 5 NA
# 4 5 2 6 5 NA
# 5 4 4 2 8 NA
Данные
L <- list(structure(list(a = 5L, b = 2L, c = 4L, d = 10L, e = 1L), class = "data.frame", row.names = c(NA,
-1L)), structure(list(a = 6L, b = 7L, c = 4L, d = 6L, e = 1L), class = "data.frame", row.names = c(NA,
-1L)), structure(list(a = 7L, b = 3L, c = 5L, d = 5L), class = "data.frame", row.names = c(NA,
-1L)), structure(list(a = 5L, b = 2L, c = 6L, d = 5L), class = "data.frame", row.names = c(NA,
-1L)), structure(list(a = 4L, b = 4L, c = 2L, d = 8L), class = "data.frame", row.names = c(NA,
-1L)))