说,我有一个这样的数据框列表:
# To create dummy data
df_create <- function(x) data.frame(a = 1:x, b = runif(x))
# Create list of dummy data frames
mylist <- list(df_create(10), df_create(10), df_create(10), df_create(10))
我可以使用cbind
和do.call
将它们绑定在一起,如下所示:
# Bind data frames together
do.call(cbind, mylist)
# a b a b a b a b
#1 1 0.02000419 1 0.29098648 1 0.1433533 1 0.59307504
#2 2 0.26775702 2 0.23208306 2 0.1729216 2 0.04506591
#3 3 0.01336910 3 0.78083216 3 0.6713367 3 0.84223524
#4 4 0.46972923 4 0.43417273 4 0.2663393 4 0.03955171
#5 5 0.62543992 5 0.38561626 5 0.3620604 5 0.11384484
#6 6 0.25747343 6 0.53876212 6 0.2875563 6 0.10921397
#7 7 0.48790572 7 0.08488719 7 0.1627827 7 0.08641714
#8 8 0.54707416 8 0.28780866 8 0.7763911 8 0.48040182
#9 9 0.58214358 9 0.98220356 9 0.5845031 9 0.80809334
#10 10 0.11839613 10 0.40025797 10 0.7633499 10 0.86299285
但这会留下所有a
列,它们是相同的。所以,我真正需要做的就是加入他们。如果我只做第一对,它可能看起来像这样:
# Just two elements
left_join(mylist[[1]], mylist[[2]], by = "a")
# a b.x b.y
#1 1 0.02000419 0.29098648
#2 2 0.26775702 0.23208306
#3 3 0.01336910 0.78083216
#4 4 0.46972923 0.43417273
#5 5 0.62543992 0.38561626
#6 6 0.25747343 0.53876212
#7 7 0.48790572 0.08488719
#8 8 0.54707416 0.28780866
#9 9 0.58214358 0.98220356
#10 10 0.11839613 0.40025797
这很棒。这就是我想要的,但对于所有列表中的数据帧。因此,接下来我尝试将left_join
与do.call
合并:
# Expanding using do.call
do.call(left_join, c(mylist, by = "a"))
这会引发以下错误:
错误:
suffix
必须是长度为2的字符向量,而不是长度为2的列表
这似乎是指添加到重复列的后缀(例如,上面两个数据框连接示例中添加到.x
列的.y
和b
) 。由于我没有在任何地方指定suffix
,因此left_join
的默认参数值必须与do.call
不一致,但我不知道如何解决此错误。有什么建议?