R矢量化:为每一行赋值,根据每一行的col索引来区分col



我有一个由40000行和9列组成的矩阵a和一个包含40000项的向量B。B中的每个项目都是一个从1到9的数字。我想将A中与B中项目相对应的特定列指定为1。现在,我正在使用for循环。

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

但有没有一种方法可以将其矢量化?感谢

您可以尝试

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

相关内容

最新更新