2012-12-14 6 views
2

낚시 보트 트랙 수가 많습니다. R을 사용하여 운동에서 특정 패턴을 감지하려고합니다. 그래서 모든 포인트를 버린 시점에 도달했습니다. 원하는 패턴이 주어진 시간 창 내에서 발생하지 않는 트랙의 위치와 나머지 지리 참조 지점을 남겨 둡니다. 이 점수에는 원하는 패턴의 '강도'를 측정하는 점수 값이 있습니다.R의 지리 참조 연산 된 변수의 누적 합계

track_1 [1:10] : 이러한 점 중 일부는 내가 '풀'에 필요한 서로 지리적으로 가까운 발생하기 때문에

 LAT  LON SCORE 
1 32.34855 -35.49264 80.67 
2 31.54764 -35.58691 18.14 
3 31.38293 -35.25243 46.70 
4 31.21447 -35.25830 22.65 
5 30.76365 -35.38881 11.93 
6 30.75872 -35.54733 22.97 
7 30.60261 -35.95472 35.98 
8 30.62818 -36.27024 31.09 
9 31.35912 -35.73573 14.97 
10 31.15218 -36.38027 37.60 

코드를 넣고 동일한 데이터

data.frame(cbind(
    LAT=c(32.34855,31.54764,31.38293,31.21447,30.76365,30.75872,30.60261,30.62818,31.35912,31.15218), 
    LON=c(-35.49264,-35.58691,-35.25243,-35.25830,-35.38881,-35.54733,-35.95472,-36.27024,-35.73573,-36.38027), 
    SCORE=c(80.67,18.14,46.70,22.65,11.93,22.97,35.98,31.09,14.97,37.60))) 

을 제공합니다 함께 점수. 따라서 이제는이 데이터를 일종의 공간 격자에 던져서 그리드의 같은 셀에있는 모든 점의 점수를 누적하여 합산하는 방법이 필요합니다. 이것은 주어진 어선이 내가 가장 후 (그리고 한 곳에서 보낸 시간에 관한 것만은 아님) 패턴을 보여주는 부분을 찾을 수있게 해줍니다. 궁극적으로 기본 출력에는 모든 그리드 셀 (가운데)에 대한 lat 및 lon과 각 셀의 모든 점수 합이 포함됩니다. 또한 그리드 셀의 크기를 조정할 수 있기를 바랍니다.

주위를 둘러 보았습니다. 찾은 것 중 하나가 지리 참조 연산 된 정보를 보존하지 못하거나 매우 비효율적이거나 데이터 비닝을 수행합니다. 거기에 이미 몇 가지 대답이있을 수 있지만, 나는이 물건에 내 리그에서 조금 벗어난 이후로 나는 그들을 인식 할 수없는 경우가있을 수 있습니다. 누군가가 어떤 방향 (패키지, 기능 등)을 가르쳐 주시겠습니까? 모든 지침은 크게 감사하겠습니다.

+0

귀하의 질문은 다소 모호합니다. 래스터 패키지의 방향과 그 안에 포함 된 오버레이 기능을 막연하게 알려 드리겠습니다. – Spacedman

+0

@ 스페이스 맨 확인해 보겠습니다. 덕분에 – ruisea

+0

그리드에 데이터를 던지는 것, 같은 셀의 합계 점이 바람직하지 않다고 묘사 한 비닝과 어떻게 다른가요? – MvG

답변

2

위도/경도 좌표를 가져 와서 원하는 그리드 셀 가장자리 길이의 역수 (도 단위)를 곱합니다. 결과는 정수 부분이 해당 격자 셀을 식별하는 한 쌍의 부동 소수점 숫자가됩니다. 이 중 floor을 가져 와서 셀을 설명하는 두 개의 숫자가 있습니다. paste을 사용하면 단일 문자열을 구성 할 수 있습니다. 이를 데이터 프레임의 새로운 요소 열로 추가 할 수 있습니다. 그런 다음 값을 요약하는 것과 같은 요소를 기반으로 작업을 수행 할 수 있습니다.

예 :

latScale <- 2 # one cell for every 0.5 degrees 
lonScale <- 2 # likewise 
track_1$cell <- factor(with(track_1, 
    paste(floor(LAT*latScale), floor(LON*lonScale), sep='.'))) 
library(plyr) 
ddply(track_1, .(cell), summarize, 
     LAT=mean(LAT), LON=mean(LON), SCORE=sum(SCORE)) 

당신이, 당신은 대신 평균의 weighted.mean를 사용하려면

. 이러한 요소가 마음에 들지 않으면 기호 대신 나침반 길 찾기를 사용하여 더 좋게 만들거나 더러워서 한 쌍의 정수 열을 대신 사용할 수 있습니다.

+0

** 감사합니다! ** 매력처럼 작동했습니다. 나는이 몇 줄의 코드가 내 문제를 해결했다고 생각하지 않는다. 결국 각 셀의 영역이 위도에 따라 다르다는 사실을 설명하기 위해 점수에 수정을 적용해야했습니다. 그것 이외에 나는 그것을 그대로 사용했다. SO에 관한 제 1의 질문에 얼마나 큰 결과입니까! 내가 투표 할 수 없다는 것은 부끄러운 일이다. – ruisea