Модификация пустой матрицы заданной матрицы позиций и вектора значений - PullRequest
1 голос
/ 17 мая 2019

При следующей настройке:

> 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 представляет строку в vals, а значения представляют столбец, в который должно быть помещено значение.

Например, 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 Ответ

2 голосов
/ 17 мая 2019

Мы можем использовать индексирование строк / столбцов, 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...