R Vectorize:根据每行的col索引为每行赋值,diff col

时间:2015-04-06 06:35:28

标签: r matrix indexing vectorization

我有一个包含40000行和9个列的A矩阵和一个包含40000个项目的矢量B. B中的每个项目都是1到9之间的数字。我想将A中的特定列分配给B中的项目1。 现在,我正在使用for循环。

for(r in 1:40000){
   A[r,B[r]]=1
}

但有没有办法对其进行矢量化? 感谢

1 个答案:

答案 0 :(得分:2)

你可以尝试

A[cbind(1:nrow(A), B)] <- 1

使用OP代码检查结果

 for(r in 1:nrow(A1)){
  A1[r, B[r]] <- 1
  }
 identical(A, A1)
#[1] TRUE

这里我们使用我们用cbind创建的矩阵。来自?"["

  

当通过[单个参数索引数组时] i可以是具有与x的维度一样多的列的矩阵;结果是一个向量,其元素对应于i的每一行中的索引集。

数据

set.seed(24)
A <- matrix(sample(1:40, 25*9, replace=TRUE), ncol=9)
B <- sample(1:9, 25, replace=TRUE)
A1 <- A