按列名合并3个data.frames

Elb*_*Elb 4 r dataframe

我有三个独立的data.frames.这三个data.frames具有相同的列数和相同的行数.另外,它们具有相同的列名.我正在尝试根据列名合并三个data.frames.我正在使用以下代码编写合并两个data.frames并返回匹配数.

Merged_DF = sapply(names(DF1),function(n) nrow(merge(DF1, DF2, by=n)))
Run Code Online (Sandbox Code Playgroud)

问题是虽然在这个例子中有两个data.frames,但在我的例子中我有3个data.frames.如何修改代码以合并三个data.frames而不是两个?我试图以这种方式修改字符串只是添加第三个data.frame但它不起作用:

  Merged_DF = sapply(names(DF1),function(n) nrow(merge(DF1, DF2, DF3,  by=n)))
Run Code Online (Sandbox Code Playgroud)

它返回以下错误:

 Error in fix.by(by.x, x) :  'by' must specify column(s) as numbers, names or logical
Run Code Online (Sandbox Code Playgroud)

例如:

DF1

 G1  G2  G3
  a   b   f
  b   c   a
  c   d   b
Run Code Online (Sandbox Code Playgroud)

DF2

 G1  G2  G3
  A   b   f
  b   c   a
  h   M   b
Run Code Online (Sandbox Code Playgroud)

DF3

 G1  G2  G3
  a   b   f
  b   l   a
  j   M   v
Run Code Online (Sandbox Code Playgroud)

data.frames有大约250行和50个cols.

Pau*_*cki 12

今天研究了这个同样的问题几个小时后,我使用“dplyr”管道和基本 R“merge()”函数的组合想出了这个简单但优雅的解决方案。

MergedDF <- merge(DF1, DF2) %>%
              merge(DF3)
Run Code Online (Sandbox Code Playgroud)

正如您在帖子中提到的,这假设列名称相同,并且您要合并的每个数据框中的行数相同。这还将自动消除合并过程中使用的任何重复列(即标识符)。


rcs*_*rcs 7

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

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

或者merge_recurse来自reshape包裹:

library(reshape)
data <- merge_recurse(df_list)
Run Code Online (Sandbox Code Playgroud)

另请参阅R Wiki:合并数据框架