2014-03-13 3 views
0

공간 데이터 상관 관계가있는 포인트를 포인트 데이터 세트에서 제거하려고합니다. 원본 데이터 세트에서 포인트를 제거해야 출력의 모든 포인트가 'x'미터에 더 가깝지 않습니다. 나는이 점들이 어떻게 선택되는지에 대한 선호가 없다.가까운 포인트 제거 R

나는 포인트 간의 거리를 계산하는 다양한 방법을 찾았지만 최종 목표를 달성하기 위해 어떻게 사용하는지 확신 할 수 없습니다.

질문 1 :이 기능이 많은 공간 분석 패키지 중 하나에 있습니까? 나는 아무것도 찾을 수 없지만 적절한 검색 용어가 누락 될 수 있습니다.

그렇지 않은 경우

,

질문 2 : 그것은 (선택하는 50 만 포인트까지) 다음 절차를 사용하는 것이 실용적 수 있을까요? 예

  • 대하여 반복이 프로세스를 추가하는 경우

    1. 임의로 이동, 제 1, 출력없는 경우의 "X"거리 내에 있는지 여부를 확인
    2. 무작위 다른 지점을 선택하여 원래의 집합으로부터 하나 개의 점을 선택 한 번에 한 포인트 씩 거리 에 출력 데이터 세트의 누적 포인트가 있는지 확인하십시오.

    코드를 사용하는 데 도움이 될 필요는 없지만 목표를 달성하기 위해 실제로 사용할 수있는 방법 및/또는 실용적인 방법을 측정하려고합니다.

  • +1

    반대로

    dist(subset(ProxFiltered,Z==1)) 

    약 한 달 전에, 그들은 내 제안과 함께 달리고 자신의 해결책을 게시 한 것처럼 보입니다. 솔루션을 보증 할 수는 없지만 (직접 시도하지는 않았어도) [링크가 있습니다] (http://stackoverflow.com/q/22051141/980833). –

    +0

    조쉬, 당신이 대답 할 때 나는이 오른쪽을 발견했습니다. 잘하면 나는 그것을 잘 작동시킬 수있다. 나는 답장을 고맙게 생각한다. – user3412205

    +0

    문제 없습니다. 내가 자신의 데이터에 적용하기 전에 해당 질문에 대한 대답에 방금 남긴 주석을 확인하십시오. –

    답변

    0

    조쉬가 권장하는 코드를 적용하기에 충분한 배경을 알 수 없기 때문에 대부분이 작업을 수행하기 위해 자신 만의 작은 프로그램을 작성했지만 완전히 가능할 것으로 확신합니다.

    이 문제는 분명히 가장 효율적이거나, 깨끗하거나, 아마도 권장되는 방법이 아니라는 것을 알고 있지만, 저에게는 효과가있는 것 같습니다.

    예 : 두 개의 데이터 열을 'A'와 'B'와 dataframe 'AA'로 시작 좌표, "Y 좌표"및 "X 좌표"및 그룹화 변수 'Z'

    ProxFiltered로 구분 점을 유지 리스트 'split.aa'첫 번째 행 (점)의 각 요소에 대해 Z

    aa <- data.frame(a=rnorm(100),b=rnorm(100),easting=rnorm(100),northing=rnorm(100),Z=rep(1:4, each=25)) 
    aa <- aa[sample(nrow(aa)),] 
    split.aa<-split(aa, aa$Z) 
    
    ProxFiltered<-aa[0,] 
    for (j in 1:4){ 
        out<- split.aa[[j]][1,] 
        for(i in 2:nrow(split.aa[[j]])){ 
        pts<- as.matrix(out[,3:4]) 
        pt<- as.numeric(split.aa[[j]][i,3:4]) 
        dists<- spDistsN1(pts, pt, longlat = FALSE) 
        exceed<- any(dists<1) 
        if (exceed==FALSE){ 
         out<-rbind(out, split.aa[[j]][i,]) 
        } 
        } 
        ProxFiltered<-rbind(out, ProxFiltered)} 
    

    의 각 단계에서 1보다 큰 거리를 선택한다.

    다음 포인트가 선택되고 첫 번째 거리가 계산됩니다.

    거리가 임계 값 (이 경우 1)보다 큰 경우 필터링 된 데이터에 포인트가 추가됩니다.

    프로세스는 한 번에 한 포인트 씩 반복되며 각 새 포인트에서 이미 필터링 된 데이터에있는 모든 데이터까지의 거리를 측정하고 임계 값보다 작은 거리가없는 경우 필터링 된 데이터에 추가합니다.

    는 Z의 한 단계에서 모든 점 사이의 거리를 확인하여 확인할 수 있습니다 나는이 같은 질문을 사람에게 몇 가지 포인터를 준 원본 데이터

    dist(subset(aa,Z==1))