「同時に」記録された UTM ロケーション間の距離 (メートル単位) を計算していますが、問題があります。今書いているように、「時間的に最も近い」1人の個人間の距離のみを計算しています。時間的に「近い」すべての個人間の距離を計算したい。
私の例では、3 頭のヘラジカと 3 頭のオオカミがいます。ヘラジカ 1 を取り、同時に記録されたオオカミ 1、オオカミ 2、オオカミ 3 の位置間の距離を計算したいと考えています。現在、スクリプトはオオカミ間の絶対最小時間差のみを検索し、その 1 つのオオカミの距離を計算します。他のすべて。
これが私のテストデータです:
ヘラジカの位置データ:
structure(list(id = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L), .Label = c("F07001",
"F07010", "M07012"), class = "factor"), x = c(1482445L, 1481274L,
1481279L, 1481271L, 1480849L, 1480881L, 1480883L, 1480880L, 1482448L,
1482494L, 1482534L, 1482534L, 1482553L, 1482555L, 1482414L, 1482852L,
1476120L, 1476104L, 1476101L), y = c(6621768L, 6619628L, 6619630L,
6619700L, 6620321L, 6620427L, 6620438L, 6620423L, 6616403L, 6616408L,
6616395L, 6616408L, 6616406L, 6616418L, 6616755L, 6616312L, 6623655L,
6623646L, 6623652L), date = structure(c(1173088800, 1173096000,
1173103260, 1173110400, 1173117600, 1173211200, 1173218400, 1173139200,
1173088800, 1173096000, 1173103260, 1173110400, 1173117600, 1173211200,
1173218400, 1173139200, 1173270600, 1173277800, 1173282960), class = c("POSIXct",
"POSIXt"), tzone = "UTC")), .Names = c("id", "x", "y", "date"
), row.names = c(NA, -19L), class = "data.frame")
オオカミの位置データ:
structure(list(id = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L), .Label = c("HF7572",
"Htest", "UM1347"), class = "factor"), x = c(1480610L, 1480640L,
1480613L, 1480613L, 1480555L, 1480567L, 1480627L, 1480532L, 1480593L,
1484394L, 1484394L, 1483940L, 1483933L, 1483935L, 1483930L, 1483855L,
1483793L, 1483802L, 1484392L, 1483855L), y = c(6619853L, 6619739L,
6619759L, 6619862L, 6619838L, 6619772L, 6619902L, 6619899L, 6619887L,
6619589L, 6619602L, 6619899L, 6619907L, 6619905L, 6619896L, 6619834L,
6619702L, 6619672L, 6619558L, 6619834L), date = structure(c(1173088800,
1173096060, 1173103440, 1173111600, 1173117780, 1173213600, 1173218400,
1173141120, 1173266100, 1173095940, 1173099600, 1173103200, 1173106920,
1173110400, 1173208800, 1173211200, 1173222000, 1173266100, 1173362100,
1173211200), class = c("POSIXct", "POSIXt"), tzone = "UTC")), .Names = c("id",
"x", "y", "date"), row.names = c(NA, -20L), class = "data.frame")
これまでの私のスクリプトは次のとおりです。
mloc=read.csv("moose.csv", head = T)
wloc=read.csv("wolf.csv", head=T)
mloc$date<-as.POSIXct(strptime(mloc$date,"%Y-%m-%d %H:%M"),tz="UTC")
wloc$date<-as.POSIXct(strptime(wloc$date,"%Y-%m-%d %H:%M"),tz="UTC")
#sort the data sequentially by date time then convert to number
Sortmoose = mloc[order(mloc$date),]
Sortwolf = wloc[order(wloc$date),]
m <- as.numeric(Sortmoose$date)
w <- as.numeric(Sortwolf$date)
#Creates index of the time intervals
id <- findInterval(m, w, all.inside=TRUE)
id_min <- ifelse(abs(m-w[id])<abs(m-w[id+1]), id, id+1)
Sortmoose$wolfID = Sortwolf$id[id_min]
Sortmoose$wolfdate =Sortwolf$date[id_min]
Sortmoose$wolfx = Sortwolf$x[id_min]
Sortmoose$wolfy = Sortwolf$y[id_min]
Sortmoose$dist= sqrt((Sortmoose$wolfx-Sortmoose$x)^2+(Sortmoose$wolfy-Sortmoose$y)^2)
場所が「同じ」時間に記録されている限り、すべてのムース/オオカミのペア間の距離を計算したいと思います。ヘラジカの情報と関連するオオカミの情報、およびこれら 2 点間の距離 (メートル単位) を出力に含めたいと思います。時差も欲しいので、45分を超えるものやそのようなものを除外できますが、これは後でできると思います. 基本的には次のようなものです: mooseID mooseDate mooseX mooseY wolfID wolfDate wolfX wolfY Distance(m) TimeDiff (min)