【问题标题】:Update matrix using matrix of indices in R使用 R 中的索引矩阵更新矩阵
【发布时间】:2015-12-09 05:53:19
【问题描述】:

我有一个 5000 行和 4000 列的零矩阵。 此外,我还有另一个 400,000 行和 3 列的矩阵。第一列表示行索引,第二列表示列索引,最后一列是值。 我想使用索引矩阵更新第一个矩阵。 例如:

data <- matrix(0, 10, 7)

> data
       [,1] [,2] [,3] [,4] [,5] [,6] [,7]
 [1,]    0    0    0    0    0    0    0
 [2,]    0    0    0    0    0    0    0
 [3,]    0    0    0    0    0    0    0
 [4,]    0    0    0    0    0    0    0
 [5,]    0    0    0    0    0    0    0
 [6,]    0    0    0    0    0    0    0
 [7,]    0    0    0    0    0    0    0
 [8,]    0    0    0    0    0    0    0
 [9,]    0    0    0    0    0    0    0
[10,]    0    0    0    0    0    0    0

ind <- matrix(c(1, 2, 5,
            2, 3, 6,
            5, 7, 4,
            5, 6, 16), ncol=3, byrow=T)

> ind
      [,1] [,2] [,3]
[1,]    1    2    5
[2,]    2    3    6
[3,]    5    7    4
[4,]    5    6   16

我想在更新元素后得到下面的矩阵:

> data
       [,1] [,2] [,3] [,4] [,5] [,6] [,7]
 [1,]    0    5    0    0    0    0    0
 [2,]    0    0    6    0    0    0    0
 [3,]    0    0    0    0    0    0    0
 [4,]    0    0    0    0    0    0    0
 [5,]    0    0    0    0    0    16   4
 [6,]    0    0    0    0    0    0    0
 [7,]    0    0    0    0    0    0    0
 [8,]    0    0    0    0    0    0    0
 [9,]    0    0    0    0    0    0    0
[10,]    0    0    0    0    0    0    0

在我的大问题中最好/有效的解决方案是什么?

【问题讨论】:

    标签: r


    【解决方案1】:

    由于您始终可以使用两列矩阵进行索引,因此您可以使用前两列作为完整索引,然后用第三列替换。

    data[ind[, -3]] <- ind[, 3]
    

    导致

    data
    #      [,1] [,2] [,3] [,4] [,5] [,6] [,7]
    # [1,]    0    5    0    0    0    0    0
    # [2,]    0    0    6    0    0    0    0
    # [3,]    0    0    0    0    0    0    0
    # [4,]    0    0    0    0    0    0    0
    # [5,]    0    0    0    0    0   16    4
    # [6,]    0    0    0    0    0    0    0
    # [7,]    0    0    0    0    0    0    0
    # [8,]    0    0    0    0    0    0    0
    # [9,]    0    0    0    0    0    0    0
    #[10,]    0    0    0    0    0    0    0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多