我已经计算使用从统计函数dist
距离矩阵。我碰到dist.matrix
从Wordspace,这似乎是为大型矩阵快得多。然而,尽管dist
可以处理NA的,dist.matrix
不能和时,有一个缺失值填充为NAS整个矩阵。
例如:
X <- data.frame(replicate(5,rnorm(100)))
X[1:10, 1] <- NA
X[10:30, 2] <- NA
X[50:55, 3] <- NA
d <- as.matrix(dist(as.matrix(X), method = "euclidean"))
> d[1:6, 1:6]
1 2 3 4 5 6
1 0.000000 1.434098 2.956302 1.505901 3.172647 2.083671
2 1.434098 0.000000 3.799095 2.326719 3.599186 2.935583
3 2.956302 3.799095 0.000000 2.097622 3.661096 1.455270
4 1.505901 2.326719 2.097622 0.000000 3.995651 0.843491
5 3.172647 3.599186 3.661096 3.995651 0.000000 4.095924
6 2.083671 2.935583 1.455270 0.843491 4.095924 0.000000
鉴于:
d2 <- dist.matrix(as.matrix(X), method="euclidean")
> d2[1:6, 1:6]
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] NaN NaN NaN NaN NaN NaN
[2,] NaN NaN NaN NaN NaN NaN
[3,] NaN NaN NaN NaN NaN NaN
[4,] NaN NaN NaN NaN NaN NaN
[5,] NaN NaN NaN NaN NaN NaN
[6,] NaN NaN NaN NaN NaN NaN
参数skip.missing = T似乎并没有帮助。此外,跳绳是不是正确的解决方案:什么dist
做的是规模的距离,以反映某一对非NA的数量。
有任何想法吗?
distm()函数处理的NA很好,但我不知道该解决方案的速度。