从 R 中的距离矩阵中删除 NA 值

Remove NA values from distance matrix in R

我是 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

有什么优雅的方法可以做到这一点吗?非常感谢!

让我们做一个更小的例子,以便我们检查它:

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 的行和列,即,如果节点具有 any 缺失距离,则它完全消失了。如果这不是您想要的,请在像这样的合理大小的输入上展示您想要的结果。