Модификация пустой матрицы заданной матрицы позиций и вектора значений

Учитывая следующую настройку:

> vals = matrix(nrow = 3,ncol = 4)
     [,1] [,2] [,3] [,4]
[1,]   NA   NA   NA   NA
[2,]   NA   NA   NA   NA
[3,]   NA   NA   NA   NA

> position =  matrix(c(4,2,1, 6,3,2, NA,NA,3, NA,NA,4), nrow = 3, ncol = 4)
     [,1] [,2] [,3] [,4]
[1,]    1    4   NA   NA
[2,]    2    3   NA   NA
[3,]    1    2    3    4

> temp = c(10, 5, 8, 6, 9, 2, 4, 3)

Я пытаюсь заполнить vals значениями, содержащимися в temp . Однако значения должны быть размещены в точках, заданных position . В частности, каждая строка в position представляет строку в значениях, а значения представляют столбец, в который должно быть помещено значение.

Например, position[2,2] = 3 . Поскольку это вторая строка позиции, соответствующее значение должно входить в vals[2,3] . Окончательный результат будет:

     [,1] [,2] [,3] [,4]
[1,]   10   NA   NA    5
[2,]   NA    8    6   NA
[3,]    9    2    4    3

Это было бы просто с циклами for, но можно ли это сделать без них?

Всего 1 ответ


Мы можем использовать индексирование строки / столбца путем cbind индекса row (созданного с помощью row , c -> преобразовать матрицу числового индекса в вектор), с индексом столбца путем транспонирования 'position', приведем его к вектору ( c ), удалите элементы NA ( na.omit ), извлеките элементы в 'vals' на основе индексов и назначьте ( <- ) значение 'temp'

vals[na.omit(cbind(c(t(row(position))), c(t(position))))] <- temp
vals
#     [,1] [,2] [,3] [,4]
#[1,]   10   NA   NA    5
#[2,]   NA    8    6   NA
#[3,]    9    2    4    3

данные

position <- structure(c(1, 2, 1, 4, 3, 2, NA, NA, 3, NA, NA, 4), .Dim = 3:4)

Есть идеи?

10000