我有一些表Table1
,Table2
,Table3
,Table4
。它们具有相同数量的columns
和rows
,我想要的是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
不合适。
我很确定这是一项微不足道的任务,但我被困住了。有什么帮助吗?
答案 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)
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