2016-06-01 2 views
-1

матрица, с которой я работаю, выглядит так. Это квадратперестроить матрицу в R

structure(c(3, 4, 2, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 
    0, 0, 0, 2, 2, 0, 3, 9), .Dim = c(5L, 5L), .Dimnames = list(c("a1", 
    "a2", "a3", "a4", "a5"), c("a1", "a2", "a3", "a4", "a5"))) 

Мне нужно сложить элементы ниже и выше triagonal и слейте верхний треугольник матрицы. Результат выглядит следующим образом

  structure(c(3, 4, 2, 4, 2, 0, 0, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 3, 0, 0, 0, 0, 9), .Dim = c(5L, 5L), .Dimnames = list(c("a1", 
"a2", "a3", "a4", "a5"), c("a1", "a2", "a3", "a4", "a5"))) 

есть эффективный способ сделать это? Так что просто добавить УПТ значений нижней и верхней половины в нижней части элемента -

+0

нет, пожалуйста, посмотрите на разницу в м [3,2] и м [2 , 3] - элемент добавляется вверх 2 и 1 - это 3 – kutyw

+0

. Проверьте решение ниже. Он дает ожидаемый результат. – akrun

ответ

0

Мы можем попробовать

m1[lower.tri(m1)] <- m1[lower.tri(m1)] + t(m1)[lower.tri(m1)] 
m1[upper.tri(m1)] <- 0 
identical(m1, m2) 
#[1] TRUE 
+0

, так что это будет работать и при использовании вашего решения matr [row.names (m1), colnames (m1)] <- matr [row.names (m1), colnames (m1)] + m1 из предыдущего вопроса справа - так получить всю матрицу, а затем суммировать? – kutyw

+0

@kutyw Надеюсь, но это ответ на текущий вопрос. Если это работает для этого вопроса, пожалуйста, подумайте о том, чтобы принять решение, нажав на галочку рядом с голосованием. – akrun

+0

Что такое код с диагональю? он устанавливает его в нуль вправо? потому что диагональ считается в верхнем треугольнике на R> – kutyw

Смежные вопросы