用> 1列替换矩阵中的一列

时间:2018-09-10 14:27:53

标签: r matrix replace

如何用(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 个答案:

答案 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})