Удалить значения NA из матрицы расстояний в R - PullRequest
0 голосов
/ 11 января 2019

Я новичок в R и ищу способ удалить все строки и столбцы из матрицы расстояний, которые содержат значения NA. Вот пример:

set.seed(1)

data <- matrix(rpois(n = 400, lambda = 10), nrow = 20, ncol = 20)
rownames(data) <- LETTERS[1:20]
dist_matrix <- dist(data, method = "euclidean")
dist_matrix[sample(1:190, 10)] <- NA

Есть ли какой-нибудь элегантный способ сделать это? Большое спасибо!

1 Ответ

0 голосов
/ 11 января 2019

Давайте сделаем небольшой пример, чтобы мы могли его проверить:

set.seed(1)
n = 7
data <- matrix(rpois(n = n^2, lambda = 10), nrow = n)
rownames(data) <- LETTERS[1:n]
dist_matrix <- dist(data, method = "euclidean")
dist_matrix[sample(1:(n * (n - 1) / 2), 2)] <- NA
dist_matrix
#           A         B         C         D         E         F
# B  9.327379                                                  
# C 11.224972  9.000000                                        
# D 10.630146        NA 10.049876                              
# E 13.674794 13.490738 12.529964        NA                    
# F 12.165525 11.532563 13.490738  7.000000 10.344080          
# G  6.633250 10.908712 10.862780 11.445523 13.601471 12.649111

x = as.matrix(dist_matrix)
x = x[rowSums(is.na(x)) == 0, colSums(is.na(x)) == 0, drop = FALSE]
as.dist(x)
#          A        C        F
# C 11.22497                  
# F 12.16553 13.49074         
# G  6.63325 10.86278 12.64911

Вы не дали пример вывода (и это было бы непрактично для такого большого примера), поэтому я не уверен на 100%, что вы хотите. Он пропускает строки и столбцы, которые имеют NA в полной матрице расстояний, то есть, если узел имеет любые пропущенные расстояния, он полностью исчезает. Если это не то, что вам нужно, продемонстрируйте желаемый результат на вводе разумного размера, подобном этому.

...