Это должно сделать работу.
Во-первых, создайте диагональную матрицу m2
, где каждый элемент диагонали представляет собой разницу между 1 и суммой матрицы m1
m1 <- matrix(0.1, nrow = 3, ncol = 3, dimnames = list(c('a','b','c'), c('c1','c2','c3')))
m2 <- diag(1 - colSums(m1))
m2
#> [,1] [,2] [,3]
#> [1,] 0.7 0.0 0.0
#> [2,] 0.0 0.7 0.0
#> [3,] 0.0 0.0 0.7
Затем нам нужно добавить имена строк к m2
.Возможно, мы захотим выделить первые 3 буквы алфавита , а не , используемые для m1
.Преимущество этого состоит в том, что вам не нужно указывать имена строк новой матрицы - они будут распределяться на основе того, что еще не было использовано.
rownames(m2) <- letters[!letters %in% rownames(m1)][1:nrow(m2)]
rbind(m1, m2)
#> c1 c2 c3
#> a 0.1 0.1 0.1
#> b 0.1 0.1 0.1
#> c 0.1 0.1 0.1
#> d 0.7 0.0 0.0
#> e 0.0 0.7 0.0
#> f 0.0 0.0 0.7
Как видите, этот кодпо-прежнему работает с большим количеством строк / столбцов и разными числами в m1
:
m1 <- matrix(0.11, nrow = 3, ncol = 4, dimnames = list(c('a','b','c'), c('c1','c2','c3','c4')))
m1
#> c1 c2 c3 c4
#> a 0.11 0.11 0.11 0.11
#> b 0.11 0.11 0.11 0.11
#> c 0.11 0.11 0.11 0.11
m2 <- diag(1 - colSums(m1))
m2
#> [,1] [,2] [,3] [,4]
#> [1,] 0.67 0.00 0.00 0.00
#> [2,] 0.00 0.67 0.00 0.00
#> [3,] 0.00 0.00 0.67 0.00
#> [4,] 0.00 0.00 0.00 0.67
rownames(m2) <- letters[!letters %in% rownames(m1)][1:nrow(m2)]
rbind(m1, m2)
#> c1 c2 c3 c4
#> a 0.11 0.11 0.11 0.11
#> b 0.11 0.11 0.11 0.11
#> c 0.11 0.11 0.11 0.11
#> d 0.67 0.00 0.00 0.00
#> e 0.00 0.67 0.00 0.00
#> f 0.00 0.00 0.67 0.00
#> g 0.00 0.00 0.00 0.67
Создано в 2019-02-20 пакетом представлением (v0.2.1)