【问题标题】:Combine two Matrix with different row count结合两个具有不同行数的矩阵
【发布时间】:2014-05-04 14:45:30
【问题描述】:

我想合并两个具有不同行数的矩阵:

k<-c(11,21,31,4,5,6,7,8,9)
k<-as.matrix(k)
m<-c(10,20,30,4,5,6)
m<-as.matrix(m)

我正在使用此命令,但对我来说不能正常工作:

j<-merge(m,k,all=TRUE)

我该怎么做才能完成这项工作

编辑

我想要这样的东西:

   [,1]  [,2]
[1,] 11    10
[2,] 21    20 
[3,] 31    30
[4,] 4     4
[5,] 5     5
[6,] 6     6
[7,] 7     NA
[8,] 8     NA
[9,] 9     NA

【问题讨论】:

  • 请更具体地说明您希望如何组合这些矩阵。您是否只是在寻找rbind(),假设 的数量相同?
  • 我想cbind 但我收到一个错误:矩阵的行数必须匹配(参见参数 2)
  • 您对cbind() 的期望是什么,考虑到行数确实不相等? cbind(1:9,1:6) 可能是您要查找的内容,它会回收较短的向量并发出警告。我建议考虑为什么你会想要cbind长度不等的向量。
  • 我已经编辑了我的帖子

标签: r


【解决方案1】:

另一种方式

k <- as.data.frame(matrix(c(1:9, 11,21,31,4,5,6,7,8,9), 9,2))
m <- as.data.frame(matrix(c(1:6, 10,20,30,4,5,6), 6, 2))
j <- as.matrix(merge(k,m, by = "V1", all.x = T)[, -1])

【讨论】:

  • 谢谢,但如果我使用它,我会得到:Error in fix.by(by.x, x) : 'by' must specify uniquely valid column(s)
  • 好的,我没有那个错误,但我修改了答案,所以你不会有它。立即尝试
【解决方案2】:

如果只有两个向量,最简单的方法可能是让它们的长度相同

mlen <- max(length(m), length(k))
length(m) <- length(k) <- mlen
cbind(m,k)

将给出所需的结果。

【讨论】:

    【解决方案3】:

    假设你想合并 m 和 k colwise...

    library(zoo)
    
    my_k <- zoo(k)
    my_m <- zoo(m)
    
    j <- as.matrix(merge(my_m, my_k))
    

    【讨论】:

    • 谢谢 :) 我怎样才能对不同列数的 rbind 做同样的事情?
    • @Kaja 看看 library(plyr) 和函数 rbind.fill.matrix()。它可能有用。
    • 它需要 RCpp,而 Rcpp 需要 R (≥ 3.0.0),我无法升级我的 R。还有其他方法可以完成这项工作吗?
    • 还有另一种方式here 和另一个here
    猜你喜欢
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 2016-11-01
    • 2022-11-24
    相关资源
    最近更新 更多