如果它们具有相同的列,则合并 tibble 表的列表

Combine list of tibble tables if they have the same columns

我有表格的数据

[[1]] 
   a b c
1  3 4 8 
[[2]] 
   d e f
1  6 7 9 
[[3]] 
   g h i
1  1 4 5 
[[4]] 
   a b c
1  9 5 2 
[[5]] 
   d e f
1  5 8 0

我想把这个合并到

[[1]]
  a b c
1 3 4 8
2 9 5 2
[[1]]
  d e f
1 6 7 9
2 5 8 0
[[3]]
  g h i
1 1 4 5

也就是说,如果 tibble 表具有相同的列名,我想将它们绑定到列表中。有人可以帮帮我吗?亲切的问候。

一个选项可以是:

lapply(split(lst, sapply(lst, function(x) toString(names(x)))), function(y) do.call(rbind, y))

$`a, b, c`
     a b c
[1,] 3 4 8
[2,] 9 5 2

$`d, e, f`
     d e f
[1,] 6 7 9
[2,] 5 8 0

$`g, h, i`
     g h i
[1,] 1 4 5

或更简洁的选项(由@Ronak Shah 提出):

tapply(lst, sapply(lst, function(x) toString(names(x))), function(x) do.call(rbind, x))

它很乱,但它可能有效

x <- unique(lapply(dummy, function(x) names(x)))
y <- lapply(dummy, function(x) names(x))
z <- match(y, x)
res <- vector(mode = "list", length = 3)
for (i in 1:length(z)) {
  res[[z[i]]] <- rbind(res[[z[i]]], dummy[[i]])
  
}

[[1]]
     a b c
[1,] 3 4 8
[2,] 9 5 2

[[2]]
     d e f
[1,] 6 7 9
[2,] 5 8 0

[[3]]
     g h i
[1,] 1 4 5