Создать строки и столбцы для матрицы

Я думаю, это происходит потому, что имя вашего класса является тем же именем другого класса в JDK. Помогите затмению определить, какой из них вы пытаетесь запустить, выбрав пакет, в котором находится ваш класс. Переход к конфигурации запуска выбирает проект и основной класс.

Когда вы нажимаете кнопку поиска, чтобы выбрать основной класс, вы найдете варианты с таким же именем, но с другим пакетом, выберите свой класс.

1
задан Roger 20 February 2019 в 21:40
поделиться

3 ответа

Это должно сделать работу.

Во-первых, создайте диагональную матрицу 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 с помощью [ 118] представьте пакет (v0.2.1)

0
ответ дан g_t_m 20 February 2019 в 21:40
поделиться

Мы можем создать набор matrix с NA элементами и заполнить диагональ в процентах. Как отметил @Jilber Urbina, мы можем объявить row.names в matrix:

hypo_companies <- c("d", "e", "f")
percentage <- 0.7

hypo_len <- length(hypo_companies)
hypo_mat <- matrix(NA, hypo_len, hypo_len, dimnames = list(hypo_companies))
diag(hypo_mat) <- rep(percentage, hypo_len)
rbind(m1, hypo_mat)

Вывод:

   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  NA  NA
e  NA 0.7  NA
f  NA  NA 0.7
0
ответ дан avid_useR 20 February 2019 в 21:40
поделиться
m2 = rbind(m1, do.call(rbind, lapply(1:NCOL(m1), function(i) replace(rep(NA, NCOL(m1)), i, 0.7))))
row.names(m2) = c(row.names(m1), c("d", "e", "f"))
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  NA  NA
#e  NA 0.7  NA
#f  NA  NA 0.7
0
ответ дан d.b 20 February 2019 в 21:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: