代码之家  ›  专栏  ›  技术社区  ›  Manuel R

将矩阵中的一列替换为>1列

  •  0
  • Manuel R  · 技术社区  · 7 年前

    如何轻松替换 (N x 1) 向量/列 (N x M) 矩阵的一个 (N x K) 矩阵,使结果为 (N x (M - 1 + K)) 矩阵?

    例子 :

    a <- matrix(c(1, 3, 4, 5), nrow = 2) # (2 x 2)
    b <- matrix(c(1, 3, 5, 6, 7, 7), nrow = 2) # (2 x 3)
    

    我现在想做这样的事情:

    a[, 1, drop = FALSE] <- b # Error
    

    R不喜欢。

    我所能想到的只是一个两步的方法:附加 b a 然后删除第1列。问题:它混合了列出现的顺序。

    基本上,我想要一个简单的替代品。我相信这是可能的。

    1 回复  |  直到 7 年前
        1
  •  2
  •   dww Jarretinha    7 年前

    您可以使用cbind:

    cbind(b, a[,-1])
    #     [,1] [,2] [,3] [,4]
    #[1,]    1    5    7    4
    #[2,]    3    6    7    5
    

    如果您需要插入一个大矩阵的中间(例如,在n列),而不是您可以使用的一端,

    cbind(a[, 1:(N-1)], b, a[, (N+1):NCOL(a)])
    

    对于一个通用版本,无论插入是在哪里(开始、中间还是结束),我们都可以使用

    a <- matrix(1:10, nrow = 2) 
    b <- matrix(c(100, 100, 100, 100, 100, 100), nrow = 2) 
    
    N <- 6 # where we want to insert
    NMAX <- NCOL(a) # the largest column where we can insert
    
    cbind(a[, 0:(N-1)], b, {if(N<NMAX) a[,(N+1):NMAX] else NULL})