2015-09-12 4 views
2

У меня есть нулевая матрица с 5000 строк и 4000 столбцов. Кроме того, у меня есть другая матрица с 400 000 строк и 3 столбца. Первый столбец указывает на индекс строки, второй столбец указывает на индекс столбца, а последним столбцом является значение. Я хочу обновить первую матрицу, используя матрицу индексов. Например:Обновление матрицы с использованием матрицы индексов в R

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 

что является лучшим/эффективным решением в моей большой проблеме?

ответ

4

Поскольку вы можете всегда использовать двухколоночную матрицу для индексации, вы можете использовать первые два столбца в качестве полного индекса, а затем заменить на третий столбец.

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 
Смежные вопросы