2013-03-08 55 views
1

我有三个独立data.frames。三个data.frames具有相同的列数和相同的行数。另外他们有相同的列名。我试图根据列名称合并三个data.frames。我使用下面的代码写入合并两个data.frames并返回匹配数。按列名合并3个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

给了我们一个你的data.frames的例子,请。 – Arun 2013-03-08 10:23:54

回答

5

可以使用Reduce功能合并多个数据帧:

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

或者merge_recursereshape包:

library(reshape) 
data <- merge_recurse(df_list) 

又见将R维基:Merge data frames

+0

嗨,rcs,非常感谢!所有data.frames之间的匹配数是否可能?最后我想知道有多少项逐列,三个data.frames是shere。 – Elb 2013-03-08 11:16:52