добавить строку и столбец в матрицу на основе последовательности и заполнить ее NaN - PullRequest
0 голосов
/ 11 июня 2018

У меня есть матрица mat_1 с зеркальными строками и столбцами, но один из них отсутствует.Допустим, мне нужны строки и столбцы в алфавитном порядке: a, b, c, d, e, но в моей матрице отсутствует одна буква, например, b

Как создать фрагмент кода, который находитпробел (ы) в алфавитной последовательности в mat_1, добавляет отсутствующие строку и столбец и заполняет наблюдения NaN во второй матрице mat_2?

Вот мой воспроизводимый пример:

set.seed(100)

#create matrix with missing column and row
mat_1 = matrix(rnorm(16), nrow=4, ncol=4, byrow = TRUE) 

#rename columns and rows
dimnames(mat_1) = list(c("a", "c", "d", "e"), c("a", "c", "d", "e")) 

#expected output
> mat_2
           a    b          c           d           e
a -0.5021924  NaN  0.1315312 -0.07891709  0.88678481
b        NaN  NaN        NaN         NaN         NaN
c  0.1169713  NaN  0.3186301 -0.58179068  0.71453271
d -0.8252594  NaN -0.3598621  0.08988614  0.09627446
e -0.2016340  NaN  0.7398405  0.12337950 -0.02931671

1 Ответ

0 голосов
/ 11 июня 2018

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

В любом случае вот обновленная версия упомянутого ответа

#create matrix with missing column and row
mat_1 = matrix(rnorm(16), nrow=4, ncol=4, byrow = TRUE) 

#rename columns and rows
dimnames(mat_1) = list(c("a", "c", "d", "e"), c("a", "c", "d", "e")) 

mat_2 <- matrix(
  NA,
  nrow = length(letters[1:5]),
  ncol = length(letters[1:5]),
  dimnames = list(letters[1:5], letters[1:5]))

mat_2[rownames(mat_1), colnames(mat_1)] <- mat_1

mat_2

#            a  b          c           d           e
# a -0.5021924 NA  0.1315312 -0.07891709  0.88678481
# b         NA NA         NA          NA          NA
# c  0.1169713 NA  0.3186301 -0.58179068  0.71453271
# d -0.8252594 NA -0.3598621  0.08988614  0.09627446
# e -0.2016340 NA  0.7398405  0.12337950 -0.02931671
...