2015-08-21 3 views

ответ

4

Мы можем преобразовать матрицу dist в matrix путем упаковки as.matrix. Это даст симметричной матрице диагонали как 0. Так как нам нужно либо только нижние или верхние треугольные значения, можно назначить один из них в «-» и сделать rowSums

m1 <- as.matrix(D) 
m1[upper.tri(m1, diag=TRUE)] <- 0 
rowSums(m1) 
colSums(m1) 

Или мы умножаем (*) 'm1' с логическим индексом из числа row и col индекс матрицы 'm1'. Значения TRUE/FALSE из логической матрицы будут преобразованы в 1/0, а при умножении значения в «m1», соответствующие значениям «0», станут 0, а другие останутся неизменными.

rowSums(m1*(row(m1)>col(m1))) 
Смежные вопросы