【问题标题】:Concatenating Matrices in RR中的连接矩阵
【发布时间】:2011-11-11 14:17:36
【问题描述】:

如何连接相同列但行数不同的矩阵?例如,我 想要连接 a ( dim(a) = 15 7000 ) 和 b (dim(b) = 16 7000),我希望结果是 31 行乘 7000 列的矩阵。我可以对不同行和列的矩阵执行此操作吗?假设我想将一个 15 行 7000 列的矩阵与另一个 16 行 7500 列的矩阵结合起来。我可以用它创建一个数据集吗?

【问题讨论】:

    标签: r matrix concatenation


    【解决方案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) 之类的东西来获取每行的最大值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 2014-07-11
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多