R中的连接矩阵
Posted
技术标签:
【中文标题】R中的连接矩阵【英文标题】:Concatenating Matrices in R 【发布时间】:2011-11-11 14:17:36 【问题描述】:如何连接相同列但行数不同的矩阵?例如,我
想要连接 a ( dim(a) = 15 7000 )
和 b (dim(b) = 16 7000)
,我希望结果是 31
行乘 7000
列的矩阵。我可以对不同行和列的矩阵执行此操作吗?假设我想将一个 15 行 7000 列的矩阵与另一个 16 行 7500 列的矩阵结合起来。我可以用它创建一个数据集吗?
【问题讨论】:
【参考方案1】:听起来你在寻找rbind
:
> a<-matrix(nrow=10,ncol=5)
> b<-matrix(nrow=20,ncol=5)
> dim(rbind(a,b))
[1] 30 5
同样,cbind
水平堆叠矩阵。
我不完全确定最后一个问题是什么意思(“我可以对不同行和列的矩阵执行此操作吗?”)
【讨论】:
假设我想组合一个 15 行 7000 列的矩阵和另一个 16 rwos 和 7500 列的矩阵。目标是遍历每一行并找到最大值。 @GTyler 您对结合 15x7000 和 16x7500 的问题没有明确定义。您需要编辑您的问题(不要发表评论)以指定以下内容:结果是什么维度?所有多余的行/列会发生什么?结果矩阵的每个元素是如何唯一确定的? @joran 我不同意,我也认为 rbind 或 cbind 是这个问题的错误函数!正如我在下面提到的,能够组合不同行号和/或列号的数据帧或矩阵更适合 cbindX!【参考方案2】: gdata 包中的cbindX 组合了具有不同列和行长度的多列。在此处查看页面:
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)
【讨论】:
cbindX
是一个很棒的功能,但 OP 显然只是按行询问绑定矩阵(注意他们指定的结果的维度),而不是按列和 gdata 不包含类似的 rbind 函数。但是,plyr 中有一个 rbind.fill
函数。
此外,我认为他们的问题定义不明确的评论是正确的。您似乎忽略了这部分:“目标是遍历每一行并找到最大值。”完全不清楚OP的意思是什么。如果他们只想用 NA 填充缺失的单元格,那么我会简单地推荐 rbind.fill。
我还是不同意。 cbindX
做他们想做的事,即“组合一个 15 行和 7000 列的矩阵和另一个 16 rwos 和 7500 列的矩阵”。 rbind.fill
似乎也适用于不同的列号?话虽如此,dplyr 现在使用rbind_list
或rbind_all
。然后他们可以使用apply(concat_data, 1, max)
之类的东西来获取每行的最大值?以上是关于R中的连接矩阵的主要内容,如果未能解决你的问题,请参考以下文章