我是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
有什么优雅的方法吗?非常感谢你!
答案 0 :(得分:2)
让我们做一个较小的示例,以便我们进行检查:
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 个距离,则该节点将完全消失。如果这不是您想要的,请在像这样的适当大小的输入上展示您想要的结果。