2016-10-29 5 views
1

저는 bidimentional scatterplot에 그려지는 문자 a ~ k로 표시된 11 개의 변수가있는 데이터 프레임을 가지고 있습니다. 유클리드 거리를 사용유클리드 거리 및 축 값을 기반으로 점을 검색합니다. R

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) 

저는 모든 포인트를 식별하는 부호 R을 프로그래밍 할 점 (D, E, F 및 g, 나)의 거리보다 30

d<-dist(cor, method = 'euclidean');d 

이 관찰 거리는 < 30이고 X 및 Y 축 값을 기반으로 이러한 점 중 하나를 검색합니다.

예 : 축 점의 기준에 따라 점 i와 점 g의 거리 값은 0.206이며 X 축과 Y 축의 값이 더 적기 때문에 점을 제외해야합니다.

그러나 어디서부터 시작해야할지 전혀 모르겠다.

누군가 코드를 시작할 수 있습니까? 그것을 할 수있는 더 좋은 방법이 거기에 아마 있지만

감사

답변

1

이 기능이 작동한다.

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] 
} 

그래서, 그들 사이의 거리가 0.3보다 작하는 쌍을 얻을 기능은 두 개의 좌표 (평면에 점)과 포인트에 대한 작동

> 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" 

참고해야 할 일.

+0

당신은 루프를'cbind (rownames (d) [쌍 [, 1]], colnames (d) [쌍 [, 2]]' – rawr