построить координаты из двух векторов в матрицу 0,1 - PullRequest
1 голос
/ 08 ноября 2019

У меня есть два вектора одинаковой длины

a <- 1:10
b <- sample.int(10,size=10)

Я хотел бы построить их в матрицу одинаковой длины (10), где a - координата строки, b - координата столбца, со значением1 для координат и 0 для всего остального. У меня есть ниже способ сделать это с помощью цикла for, но надеялся сделать это без цикла. Спасибо!

matrix01 <- matrix(0, nrow = 10, ncol = 10)

for(i in 1:10) {
   matrix01[i, b[i]] = 1
}

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

1) Используйте replace и cbind следующим образом:

replace(matrix(0, 10, 10), cbind(a, b), 1)

2) В вопросе a равно 1:10 ив этом особом случае (но не в более общем смысле) другая возможность:

+ outer(b, 1:10, `==`)

или

+ sapply(1:10, `==`, b)

3) В вопросе a равно 1:10 и b - это премутация 1:10. В этом особом случае (но не в более общем смысле) это работает:

diag(10)[b, ]

4) В вопросе и a, и b являются премуациями 1:10, и в этомв особом случае (но не в более общем смысле) это работает, чтобы дать table:

table(a, b)

Это также будет работать и аналогично:

xtabs(~ a + b)

Примечание

Обратите внимание, что в вопросе

  • используется seq(1:10), который должен быть просто 1:10
  • , необходимо добавить set.seed, чтобы сделать воспроизводимый ввод
  • определяет a но потом не использует его в коде
1 голос
/ 08 ноября 2019

Вы можете создать матрицу строк / столбцов, используя cbind и назначить значение 1 для этой позиции.

matrix01[cbind(a, b)] <- 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...