나는 사람의 주소 좌표 (addresses
)와 특정 위치의 강우 좌표를 포함하는 두 개의 데이터 세트 (rain
)를 가지고 있습니다. 좌표는 표준 위도와 경도입니다. 가장 가까운 강우 위치에 각 주소를 일치시키고 두 좌표 사이의 구형 거리를 사용하여 "가장 가까운"좌표를 결정하여이 두 세트를 병합하고 싶습니다. 순진한 방법은 각 주소와 각 강수량 위치 사이의 모든 쌍 방향 거리를 계산하고 최소값을 유지하는 것입니다. 그러나 데이터 세트가 상당히 크기 때문에 계산을 효율적으로하는 또 다른 방법이 있는지 궁금합니다.좌표 퍼지 매칭
나는 거리 계산에 지형 패키지를 사용하고 있습니다.
다음은 데이터의 하위 집합입니다.
rain <- structure(list(lat = c(-179.75, -179.75, -179.75, -179.75, -179.75,
-179.75, -179.75, -179.75, -179.75, -179.75), lon = c(71.25,
68.75, 68.25, 67.75, 67.25, 66.75, 66.25, 65.75, 65.25, -16.75
), rainfall = c(0, 4.9, 4.6, 4.9, 8.9, 15.2, 24.2, 16.3, 12.2,
365.4)), .Names = c("lat", "lon", "rainfall"), class = "data.frame", row.names = c(NA,
-10L))
addresses <- structure(list(address_lat = c(-175.33, -175.20, -177.65, -174.10, -175.80,
-179.50, -179.23, -179.12, -178.75, -174.77), address_lon = c(70.25,
69.75, 62.23, 60.50, 66.25, 61.75, 62.54, 63.70, 61.45, -15.80),
person_id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)), .Names = c("address_lat", "address_lon",
"person_id"), class = "data.frame", row.names = c(NA, -10L))
한 세트에는 300,000 개의 고유 좌표 쌍이 있고 다른 세트에는 80,000 개 이상의 고유 좌표 쌍이 있습니다. 내가 가지고있는 유일한 아이디어는 두 개의 for 루프를 사용하는 것입니다. 하나는 주소 좌표 쌍 목록을 실행하고 다른 하나는 각 주소에서 모든 강우 위치까지의 거리를 계산 한 다음 가장 작은 값을 유지하는 것입니다.
놀 수있는 데이터를 제공해 주시겠습니까? 또한 현재 코드와 현재 실행 시간을 표시 할 수 있습니까? –
님이 OP에 수정 사항을 추가했습니다. – aesir