我一直在使用Stats中的dist
函数计算距离矩阵。我从Wordspace遇到dist.matrix
,对于大型矩阵来说似乎要快得多。但是,虽然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的数量。
有什么想法吗?
答案 0 :(得分:-1)
distm()函数可以很好地处理NA,但是我不知道解决方案的速度。