我有三个独立的data.frames
。三个data.frames
具有相同的列数和相同的行数。另外,它们具有相同的列名。我正在尝试根据列名合并三个data.frames。我正在使用以下代码编写合并两个data.frames并返回匹配数。
Merged_DF = sapply(names(DF1),function(n) nrow(merge(DF1, DF2, by=n)))
问题在于,虽然在这个例子中有两个data.frames,但在我的例子中我有3个data.frames。 如何修改代码以合并三个data.frames而不是两个?我试图以这种方式修改字符串,只需添加第三个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列。
答案 0 :(得分:7)
您可以使用Reduce
功能合并多个数据框:
df_list <- list(DF1, DF2, DF3)
Reduce(function(x, y) merge(x, y, all=TRUE), df_list, accumulate=FALSE)
来自merge_recurse
包的或reshape
:
library(reshape)
data <- merge_recurse(df_list)
另见R Wiki:Merge data frames
答案 1 :(得分:1)
今天研究了这个相同的问题几个小时之后,我想出了这个简单而优雅的解决方案,它结合了“ dplyr”管道和基本的R“ merge()”函数。
Ren "*." "%date%_*.jpg"
正如您在帖子中提到的那样,这假设列名相同,并且要合并的每个数据框中的行数相同。这还将自动消除合并过程中使用的所有重复列(即标识符)。
答案 2 :(得分:0)
以防万一有人想合并列名相同但行号不相等的多个数据框,这篇文章很有帮助:https://medium.com/coinmonks/merging-multiple-dataframes-in-r-72629c4632a3
基本上,您使用 do.call 和 rbind 函数:
Merged <- do.call("rbind", list(df1, df2, df3, df4))