基于欧几里德距离和轴值R检索点

基于欧几里德距离和轴值R检索点,r,matrix,scatter-plot,euclidean-distance,R,Matrix,Scatter Plot,Euclidean Distance,我有一个由字母a到k表示的11个变量组成的数据框,绘制在一个二维散点图中 cor<-data.frame(X=c(0.36187115, -0.54755904, -0.82417308, -0.70806545, -0.77422866, -0.70003404, -0.70043884, 0.73602124,-0.89909694, -0.05937341, 0.93496883), Y=c(-0.54354070,

我有一个由字母a到k表示的11个变量组成的数据框,绘制在一个二维散点图中

cor<-data.frame(X=c(0.36187115, -0.54755904, -0.82417308, -0.70806545, -0.77422866, -0.70003404, 
                  -0.70043884,  0.73602124,-0.89909694, -0.05937341,  0.93496883), 
            Y=c(-0.54354070,-0.81211142, -0.52775892,  0.40191296,  0.36820779,  0.28163131,
                  -0.26161395, -0.26386668,-0.31894766, -0.91541962, -0.04548996), 
            row.names = letters[1:11]);cor

a<-seq(0,2*pi, length=100)
plot(cos(a),sin(a), type="l", lty=2, xlab = "X", ylab = 'Y')
points(cor[cor$X<0 & cor$Y<0,-3], pch=20, col='blue')
points(cor[cor$X<0 & cor$Y>0,-3], pch=20, col='forestgreen')
points(cor[cor$X>0 & cor$Y<0,-3], pch=20, col='red')
abline(v = 0, h = 0)
text(cor, rownames(cor), pos = 3, cex = 0.8 )

cor这个函数应该可以工作,尽管可能有更好的方法

nearby <- function(data, d){
    dist <- as.matrix(dist(data))
    dist[upper.tri(dist, diag = TRUE)] <- NA
    pairs <- which(dist < d ,arr.ind = TRUE)
    for (i in 1:nrow(pairs)){
        for (j in 1:2){
            pairs[i,j] <- letters[as.numeric(pairs[i,j])]
        }
    }
    rownames(pairs) <- NULL
    colnames(pairs) <- NULL
    pairs[,2:1]
}

请注意,该函数仅适用于具有两个坐标的点(平面上的点)。

您可以使用
cbind(rownames(d)[pairs[,1]],colnames(d)[pairs[,2]])替换循环。
nearby <- function(data, d){
    dist <- as.matrix(dist(data))
    dist[upper.tri(dist, diag = TRUE)] <- NA
    pairs <- which(dist < d ,arr.ind = TRUE)
    for (i in 1:nrow(pairs)){
        for (j in 1:2){
            pairs[i,j] <- letters[as.numeric(pairs[i,j])]
        }
    }
    rownames(pairs) <- NULL
    colnames(pairs) <- NULL
    pairs[,2:1]
}
> nearby(data = cor, d = 0.3)
     [,1] [,2]
[1,] "c"  "g" 
[2,] "c"  "i" 
[3,] "d"  "e" 
[4,] "d"  "f" 
[5,] "e"  "f" 
[6,] "g"  "i" 
[7,] "h"  "k"