我有可变长度的数据帧列表。我想使用指定的列名称或因df而异的索引将每个列表中的df合并为单个df。这是一个3 dfs的例子
my.list <- list(
data.frame(a = 1:10, b = letters[1:10], c = 101:110),
data.frame(d = 6:15, e = letters[1:10], f = 1:10),
data.frame(l = 2:11, m = letters[11:20], o = 1:10))
我想通过id中提到的每个df的特定列进行合并
ids <- c('a', 'f', 'l')
得到看起来像的东西
id b c d e m o
1 a 101 6 a NA NA
2 b 102 7 b k 1
3 c 103 8 c l 2
4 d 104 9 d m 3
5 e 105 10 e n 4
6 f 106 11 f o 5
7 g 107 12 g p 6
8 h 108 13 h q 7
9 i 109 14 i r 8
10 j 110 15 j s 9
11 NA NA NA NA t 10
我尝试使用
merge
和/或Reduce
进行此操作,但是无法传递ID 最佳答案
我们可以通过使用“ id”更改与“ ids”相对应的列名,然后用names
进行list
更改所有Reduce
元素唯一的merge
。
lst <- Map(function(x, y) {names(x)[match(y, names(x))] <- 'id'; x}, my.list, ids)
Reduce(function(...) merge(..., by = 'id', all = TRUE), lst)
# id b c d e m o
#1 1 a 101 6 a <NA> NA
#2 2 b 102 7 b k 1
#3 3 c 103 8 c l 2
#4 4 d 104 9 d m 3
#5 5 e 105 10 e n 4
#6 6 f 106 11 f o 5
#7 7 g 107 12 g p 6
#8 8 h 108 13 h q 7
#9 9 i 109 14 i r 8
#10 10 j 110 15 j s 9
#11 11 <NA> NA NA <NA> t 10