如何用(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。问题:它混合了列的出现顺序。
基本上,我希望替换一下。我肯定有可能。
答案 0 :(得分:2)
您可以使用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})