2017-05-15 5 views
0

나는이 같은 위도와 경도 데이터 ...어떻게 I 그룹 경도 및 위도 데이터

lat=runif(1000, min = 22.1, max = 22.8) 
lon=runif(1000, min = 120, max = 120.6) 
latlon=cbind(lat,lon) 

나는이에 따라 서로 다른 영역으로 그들을 분류 할 ...

Zone=c("A","B","C","C","C","D","E","E","E") 
North=c(23,23,22.83,22.67,22.42,22.33,22.33,22.42,22.50) 
South=c(22.67,22.67,22.67,22.33,22.33,22.08,22.08,22.33,22.42) 
East=c(120,120.2,120.2,120.3,120.4,120.5,120.7,120.6,120.5) 
West=c(119.7,120,120.2,120,120.3,120.2,120.5,120.4,120.3) 
data.frame(cbind(Zone,North,South,East,West)) 

http://imgur.com/uj41h2k.jpg

내 GIS 데이터 latlon 5 개의 다른 영역으로 분리 할에는 (A, B, C, D, E) 및 I는 ifelse befor를 사용하려고 전자하지만 매우 효율적이지는 않습니다.

어쨌든 더 빨리 끝낼 수 있습니까?

===================== 내가 애드리안 마틴의 제안

newzone=case_when(lat >= zzz$South[1] & lat <= zzz$North[1] & lon <= zzz$East[1] & lon >= zzz$West[1]~ zzz$Zone[1], 
      lat >= zzz$South[2] & lat <= zzz$North[2] & lon <= zzz$East[2] & lon >= zzz$West[2]~ zzz$Zone[2], 
      lat >= zzz$South[3] & lat <= zzz$North[3] & lon <= zzz$East[3] & lon >= zzz$West[3]~ zzz$Zone[3], 
      lat >= zzz$South[4] & lat <= zzz$North[4] & lon <= zzz$East[4] & lon >= zzz$West[4]~ zzz$Zone[4], 
      lat >= zzz$South[5] & lat <= zzz$North[5] & lon <= zzz$East[5] & lon >= zzz$West[5]~ zzz$Zone[5], 
      lat >= zzz$South[6] & lat <= zzz$North[6] & lon <= zzz$East[6] & lon >= zzz$West[6]~ zzz$Zone[6], 
      lat >= zzz$South[7] & lat <= zzz$North[7] & lon <= zzz$East[7] & lon >= zzz$West[7]~ zzz$Zone[7], 
      lat >= zzz$South[8] & lat <= zzz$North[8] & lon <= zzz$East[8] & lon >= zzz$West[8]~ zzz$Zone[8], 
      lat >= zzz$South[9] & lat <= zzz$North[9] & lon <= zzz$East[9] & lon >= zzz$West[9]~ zzz$Zone[9]) 

기반으로하는 새로운 코드를 작성 나는 할 수 어쨌든 있나요 더 많은 simpe 코드? 감사합니다

+1

데이터의 재현 가능한 샘플을 게시 할 수 있습니까? –

+2

개발 한 코드를 제공해주십시오. 다른 사람들이 코드를 개선하는 것을 더 쉽게 만듭니다. – www

+0

코드 이미지를 게시하지 마십시오. 데이터를 직접 게시하는 것은 어렵지 않습니다. 응답자에게보다 쉽게 ​​적용 할 수있는 방법에 대한 좋은 예가 여기에 있습니다 (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – r2evans

답변

0

cut() (r2evans '덧글에 링크 된 답변)은 5 개의 섹션을 같은 폭으로 자르고 있거나 일치하려는 비율의 벡터가있는 경우 작동합니다. 이미 존재하는 위도/경도 좌표 (ifelse를 사용하려고 시도하고있는 것처럼 보임)와 일치 시키려면 dplyr의 함수 case_when()를 사용합니다.

library(dplyr) 
    latlon <- bind_cols(lat, lon) %>% 
     mutate(Zone = case_when(.$lat > 22.83 & .$lon > 120.2 ~ A, 
           .$lat > 22.42 & .$lon > 120.0 ~ B, 
           etc etc) 

case_when는 ifelse-type 명령문을 dplyr 체인으로 가져 오는 방법입니다. 그것은 ifelse, 나는 믿는다 더 빨리 달린다.

+0

답변을 주셔서 감사합니다, Martin –

+0

문제가 해결 되었다면 문제의 답으로 받아 들일 수 있습니까? –