首页 文章

按列名合并3个data.frames

提问于
浏览
2

我有三个独立的 data.frames . 三个 data.frames 具有相同的列数和相同的行数 . 另外,它们具有相同的列名 . 我用' m trying to merge the three data.frames according to column names. I' m使用下面的代码编写合并两个data.frames并返回匹配数 .

Merged_DF = sapply(名称(DF1),函数(n)nrow(合并(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个cols .

1 回答

  • 6

    您可以使用 Reduce 函数合并多个数据框:

    df_list <- list(DF1, DF2, DF3)
    Reduce(function(x, y) merge(x, y, all=TRUE), df_list, accumulate=FALSE)
    

    或者来自 reshape 包的 merge_recurse

    library(reshape)
    data <- merge_recurse(df_list)
    

    另见R Wiki:Merge data frames

相关问题