どうしても解決できない問題があります。arcgis のラスターから派生したデータセットがあります。データセットは、10 年間のすべての火災発生を表します。一部のラスター セルでは、その期間内に複数の火災が発生し (したがって、データセットに複数の行が含まれます)、一部のラスター セルは火災が発生していません (したがって、データセットには表示されません)。したがって、データセットの各行には、列番号 (連続する整数) と、ラスターの行 ID および列 ID に対応する行番号が割り当てられています。火事の日付もあります。
fire_ID
相互に 4 日以内で、相互に隣接するピクセル内 (8 セル近傍内) にあるすべての火災に一意の ID ( ) を割り当て、これを新しい列に入れたいと思います。
明確にするために、行 3、列 3、2000 年 1 月 1 日の観測と、行 2、列 4、2000 年 1 月 4 日の観測がある場合、それらの観測には同じ が割り当てられfire_ID
ます。
以下は、ラスターの行 ID である「行」、ラスターの列 ID である「列」、および火災が検出された日付である「日付」を含むサンプル データセットです。
rows<-sample(seq(1,50,1),600, replace=TRUE)
cols<-sample(seq(1,50,1),600, replace=TRUE)
dates<-sample(seq(from=as.Date("2000/01/01"), to=as.Date("2000/02/01"), by="day"),600, replace=TRUE)
fire_df<-data.frame(rows, cols, dates)
「行」、「列」、「日付」の順にデータを並べ替えてループし、行と列の ID が 1 つの値の範囲内にあり、日付が 4 日以内の場合に新しい fire_ID を作成しようとしましたが、これは同じ fire_ID を割り当てる必要がある火災にはfire_ID
、異なる に属するリスト内のそれらの間に観測がある場合、異なる が割り当てられるため、明らかに機能しませんfire_ID
。
fire_df2<-fire_df[order(fire_df$rows, fire_df$cols, fire_df$date),]
fire_ID=numeric(length=nrow(fire_df2))
fire_ID[1]=1
for (i in 2:nrow(fire_df2)){
fire_ID[i]=ifelse(
fire_df2$rows[i]-fire_df2$rows[i-1]<=abs(1) & fire_df2$cols[i]-fire_df2$cols[i-1]<=abs(1) & fire_df2$date[i]-fire_df2$date[i-1]<=abs(4),
fire_ID[i-1],
i)
}
length(unique(fire_ID))
fire_df2$fire_ID<-fire_ID
何か提案があれば教えてください。