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_listrbind_all。然后他们可以使用apply(concat_data, 1, max) 之类的东西来获取每行的最大值?

以上是关于R中的连接矩阵的主要内容,如果未能解决你的问题,请参考以下文章

如何使 R 的“光栅”包区分 GeoTIFF 中的正旋转矩阵和负旋转矩阵?

R中的KNN混淆矩阵?

将上三角矩阵转换为 R 中的对称矩阵

基于 R 中的查找表聚合矩阵

关于R中的矩阵比较

如何应用循环遍历 R 中的矩阵