2011-09-06 137 views
35

如何连接相同列但不同行数的矩阵?例如,I 想要连接(dim(a) = 15 7000)和b (dim(b) = 16 7000),我希望得到的结果是行7000列的矩阵。我可以对不同的行和列的矩阵做这个吗?假设我想将15行7000列的矩阵与16行7500列的矩阵结合起来。我可以创建一个数据集吗?在R中连接矩阵

回答

44

听起来你正在寻找rbind

> a<-matrix(nrow=10,ncol=5) 
> b<-matrix(nrow=20,ncol=5) 
> dim(rbind(a,b)) 
[1] 30 5 

同样,cbind水平堆放的矩阵。

我不完全相信你的最后一个问题是什么意思(“我可以为不同的行和列的矩阵做到这一点?”)

+0

假设我想要将15行7000列的矩阵与16列rwos和7500列的矩阵组合起来。目标是遍历每一行并找到最大值。 – Dombey

+3

@GTyler对于15x7000和16x7500的组合问题没有很好的定义。你需要编辑你的问题(不要留下评论)来指定这样的事情:结果是什么维度?所有多余的行/列会发生什么?结果矩阵的每个元素如何唯一确定? – joran

+0

@joran我不同意,我也认为rbind或cbind是这个问题的错误功能!如下所述,能够组合不同行和/或列号的数据帧或矩阵更适合于cbindX! – gawbul

6

cbindX从包装GDATA结合的多列不同的列和行长度。点击这里,查看网页:

http://hosho.ees.hokudai.ac.jp/~kubo/Rdoc/library/gdata/html/cbindX.html

它需要多个逗号分隔的矩阵和data.frames作为输入:)你只需要

install.packages("gdata", dependencies=TRUE)

然后

library(gdata) 
concat_data <- cbindX(df1, df2, df3) # or cbindX(matrix1, matrix2, matrix3, matrix4) 
+2

这是迄今为止我尝试过的最快的解决方案。 – Datageek

+0

'cbindX'是一个很棒的函数,但OP显然只是按行询问绑定矩阵(注意它们指定的结果的维数),而不是列,并且** gdata **不包含类似的rbind函数。然而,** plyr **中有一个'rbind.fill'函数。 – joran

+0

此外,我的评论他们的问题没有很好的定义是正确的。您似乎忽略了这一部分:“目标是循环遍历每一行并找到最大值。”这完全不清楚OP的含义。如果他们只打算用NA填充丢失的单元格,那么我只会推荐rbind.fill。 – joran