【问题标题】:R Vectorize: Assign values to each row, diff col based on col index for every rowR Vectorize:为每一行分配值,根据每行的col索引来区分col
【发布时间】:2015-04-06 06:35:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: r matrix indexing vectorization


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      • 2021-06-05
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多