私は特定の個人にそのアドレスに基づいて粒状物質の曝露を割り当てようとしている研究に取り組んでいます。私は経度と緯度の座標を持つ2つのデータセットを持っています。 1つは個人用、1つはpm露光ブロックの場合です。私は各被験者に最も近いブロックに基づいて午後の露出ブロックを割り当てたいと思います。空間的な最近隣の割り当てで
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