我有一个由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