나는 그들의 주소를 기반으로 특정 개인에게 미립자 물질 노출을 할당하려고하는 연구에 착수했습니다. 경도와 위도 좌표가있는 두 개의 데이터 세트가 있습니다. 하나는 개인의 경우이고 다른 하나는 오후 노출 블록의 경우입니다. 가장 가까운 블록을 기반으로 각 피사체에 오후 노출 블록을 할당하려고합니다. R의 공간 가장 가까운 이웃 할당
library(sp)
library(raster)
library(tidyverse)
#subject level data
subjectID<-c("A1","A2","A3","A4")
subjects<-data.frame(tribble(
~lon,~lat,
-70.9821391, 42.3769511,
-61.8668537, 45.5267133,
-70.9344039, 41.6220337,
-70.7283830, 41.7123494
))
row.names(subjects)<-subjectID
#PM Block Locations
blockID<-c("B1","B2","B3","B4","B5")
blocks<-data.frame(tribble(
~lon,~lat,
-70.9824591, 42.3769451,
-61.8664537, 45.5267453,
-70.9344539, 41.6220457,
-70.7284530, 41.7123454,
-70.7284430, 41.7193454
))
row.names(blocks)<-blockID
#Creating distance matrix
dis_matrix<-pointDistance(blocks,subjects,lonlat = TRUE)
###The above code doesnt preserve the row names. Is there a way to to do
that?
###I'm unsure about the below code
colnames(dis_matrix)<-row.names(subjects)
row.names(dis_matrix)<-row.names(blocks)
dis_data<-data.frame(dis_matrix)
###Finding nearst neighbor and coercing to usable format
getname <-function(x) {
row.names(dis_data[which.min(x),])
}
nn<-data.frame(lapply(dis_data,getname)) %>%
gather(key=subject,value=neighbor)
이 코드
나에게 의미가 출력을 제공하지만 타당성과 효율성의 확실 해요. 이 코드를 개선하고 수정하는 방법에 대한 제안은 감사하겠습니다.Warning message:
attributes are not identical across measure variables;
they will be dropped
나는 (는) 출처를 확인할 수 없습니다.
감사합니다. 여기
약간 도움이됩니다. 나는 "r"객체에 포함 된 정보에서 가장 가까운 블록 ID가있는 subjedtID와 일치하는 데이터 세트로 문제가 발생하고 있다고 생각합니다. – afossa
나는 그것을 추가했다 :'data.frame (subject = subjectID, block = blockID [r])' – RobertH