我有三个独立的data.frames
。这三个data.frames
具有相同的列数和行数。此外,它们具有相同的列名。我正试图根据列名合并三个 Dataframe 。我使用下面的代码来合并两个data.frames并返回匹配的数量。
Merged_DF = sapply(names(DF1),function(n) nrow(merge(DF1, DF2, by=n)))
问题是,虽然在这个例子中有两个data.frames,但在我的例子中,我有3个data.frames。如何修改代码以合并三个 Dataframe 而不是两个?我尝试以这种方式修改字符串,只是添加第三个data.frame,但它不起作用:
Merged_DF = sapply(names(DF1),function(n) nrow(merge(DF1, DF2, DF3, by=n)))
它返回以下错误:
Error in fix.by(by.x, x) : 'by' must specify column(s) as numbers, names or logical
例如:
DF1
G1 G2 G3
a b f
b c a
c d b
DF2
G1 G2 G3
A b f
b c a
h M b
DF3
G1 G2 G3
a b f
b l a
j M v
data.frames大约有250行和50行。
5条答案
按热度按时间izkcnapc1#
您可以使用
Reduce
函数合并多个 Dataframe :或者
reshape
包中的merge_recurse
:参见R Wiki:Merge data frames
eivnm1vs2#
今天,在研究了几个小时的这个问题之后,我想出了这个简单而优雅的解决方案,使用了'duberr'管道和基本的R 'merge()'函数的组合。
正如您在文章中提到的,这假设列名相同,并且合并的每个数据框中的行数相同。这还将自动消除合并过程中使用的任何重复列(即标识符)。
ki1q1bka3#
如果有人想合并多个列名相同但行号不相等的数据框,这篇文章很有帮助:https://medium.com/coinmonks/merging-multiple-dataframes-in-r-72629c4632a3
基本上,你可以使用do.call和rbind函数:
kuarbcqp4#
我通常使用来自dqr的bind_rows
注意事项和选项在文档中
https://dplyr.tidyverse.org/reference/bind.html
happy merging:)
2uluyalo5#
下面是一个使用
tidyverse
包的选项:默认情况下,这将合并所有公共列。要获得更多控制,您可以指定一个匿名公式函数,其中
.x
表示累积值,.y
表示“下一个”值。与上述类似的表达式为: