2014-11-24 4 views
1

초보자 R 프로그래머복귀가 큰 데이터 세트 (> 1,500 OBS)에 공간적인 요소를 추가하는 고투

이 목록이 주어 R에서 관찰 주어진 반경 특성 : X/Y 점을 대응 관찰 (LAT 없음/long) 및 특성; 해당 관측치의 주어진 반지름 (10) 내 모든 관측치에 대해 변수 "Z"의 합계를 반환하는 알고리즘을 작성하는 방법은 무엇입니까? 각 관찰마다이 작업을 수행해야합니다.

OBS  X  Y   Z** 
A  56.55  -289.65 
B  52.59  -287.82 
C  58.34  -284.58  

어떤 도움을 주시면 감사하겠습니다 다음과 같이

단순화 된 데이터 헤더를 읽어 보시기 바랍니다. 감사.

답변

3

의 핵심은 한 번에 mapply()에 기능 적용 에 m ultiple 벡터를 사용하는 것입니다 - 여기 : X 및 귀하의 data.frame의 Y 구성 요소. 어떤 기능이 있습니까? data.frame에있는 모든 관측치에 대해 변수를 추가하여 "앵커 포인트"(모든 항목에 대해 실행)에서 최대로 radius 떨어져 있습니다.

> set.seed(1) 
> foo <- data.frame(X=runif(100),Y=runif(100),Z=runif(100)) 
> radius <- 0.5 
> result <- mapply(function(X,Y,Z) 
    sum(foo$Z[(foo$X-X)^2+(foo$Y-Y)^2<=radius^2]),foo$X,foo$Y) 
> head(cbind(foo,result)) 
      X   Y   Z result 
1 0.2655087 0.6547239 0.2675082 24.99153 
2 0.3721239 0.3531973 0.2186453 30.51512 
3 0.5728534 0.2702601 0.5167968 28.15519 
4 0.9082078 0.9926841 0.2689506 12.10058 
5 0.2016819 0.6334933 0.1811683 22.50695 
6 0.8983897 0.2132081 0.5185761 19.05273 

물론 각 점 Z 자체는 반지름으로 계산됩니다. 이를 원하지 않으면 foo$Z을 뺍니다.

?mapply을 살펴보십시오.

+0

이렇게하면 각 지점의 이웃 수를 계산합니다. 나는이 질문이 이웃 점들에 대한 세 번째 변수 Z의 합을 요구한다고 생각한다. 아마도 OP가이 질문에 정말로 대답하는지 명확히 할 수있을 것입니다. –

+0

당신은 정확합니다, 카운트가 충분하지 않습니다, 나는 "Z"를 합계해야합니다. 이 데이터 세트는 임업과 관련되며 이웃 나무에 의해 유발 된 경쟁을 다룹니다. "Z"는 나무의 기초 영역입니다. 큰 이웃 나무가 작은 나무보다 더 많은 경쟁을하기 때문에 그 수가 충분하지 않습니다. – cd275

+0

설명해 주셔서 감사합니다. 나는 내 대답을 편집했다. –