R中的连接/合并表

时间:2014-04-15 09:17:05

标签: r merge concatenation

我有一些表Table1Table2Table3Table4。它们具有相同数量的columnsrows,我想要的是merge将它们分成一个大Table

我已尝试制作表格列表,然后将其转换为matrix,但输出似乎不是我想要的。

l <- list(Table1, Table2, Table3, Table4)
l <- lapply(l, as.data.frame)
m <- matrix(unlist(l), nrow = length(l))

我还尝试使用merge只用merge(Table1, Table2, Table3, Table4)这四个表,但我不确定提供正确的参数,因此我收到错误。

  

fix.by(by.x,x)出错:
    &#39;由&#39;必须指定一个或多个列作为数字,名称或逻辑
  电话:合并 - &gt; merge.data.frame - &gt; fix.by

我还尝试将表写入外部.txt文件,然后从该文件中读取新表。

#write.table(Table1, file = "file.txt", append = TRUE)
#write.table(Table2, file = "file.txt", append = TRUE, col.names=FALSE)
#write.table(Table3, file = "file.txt", append = TRUE, col.names=FALSE)
#write.table(Table4, file = "file.txt", append = TRUE, col.names=FALSE)

然而,由于各种原因,这个解决方案是不够的,我不得不放弃它。

顺便说一下,我希望第一种解决方案以某种方式运作。

编辑: 我忘了提到所有四个表都有相同的索引1,2,3,..,和相同的列名等等。我指出这是因为例如cbind不合适。

我很确定这是一项微不足道的任务,但我被困住了。有什么帮助吗?

4 个答案:

答案 0 :(得分:7)

这仍然是不同标题的问题。这应该可以解决问题:

names(table2) <- names(table1)
names(table3) <- names(table1)
names(table4) <- names(table1)

为每个表格执行此操作,然后

rbind(table1,table2,...)

如果你想知道标题是否相同,你可以比较它们

names(table1) == names(table2)

答案 1 :(得分:4)

您正在寻找rbind

do.call(rbind, list(Table1, Table2, Table3, Table4))

答案 2 :(得分:2)

如果所有表中的所有列都相同,则rbind应该可以正常工作。关注Chinmay的回答。 cbind用于连接列上的数据。否则使用sqldf。

library(sqldf)
m <- sqldf("select * from table1 union all select * from table2 union all 
             select * from table3 union all select * from table4")

如果您想要所有观察,请使用union all。如果要删除重复项,请使用union。 但是如果您的数据集很大,这可能比rbind慢。

答案 3 :(得分:0)

你可以使用Reduce with merge:

l <- list(Table1, Table2, Table3, Table4)
Reduce(function(x, y) merge(x, y, all=TRUE), l)

HTH