1) グリッド ID 2) 種コード (SPCD) 3) 関連する値 (インデックス) 4) 関連する値 (index1) および 5) 緯度。
ただし、GridID には複数の SPCD があるため、GridID は一意の番号ではありません。たとえば、
tbl = data.frame(gridID=c(1,1,1,1,1,2,2,2,2,2),
SPCD=c(1,2,3,4,5,1,2,3,4,5),
INDEX=c(2,2,4,3,2,3,4,2,3,24),
INDEX1=c(1,4,3,5,4,2,34,6,4,3),
LAT=c(34.1,34.4,35,35.2,35.4,36,37,36.4,46,34))
SPCDで±0.5緯度バンド群の移動平均を求めたい。
私がしたことは
> #Generating a sequence of latitudinal bands
> lat_seq<-seq(from=26, to=49,by=.5)
> spcd_list<-unique(tbl$SPCD)
> # Creating a blank array to place the data in
> bands<-array(dim=c(length(lat_seq),nrow(spcd_list)+1,2))
> bands[,1,]<-lat_seq
>
> # Finding the averages for each moving latitudinal band
> for(i in 1:nrow(spcd_list)){
> for(j in 1:length(lat_seq)){
> lat_min<-lat_seq[j]-.5
> lat_max<-lat_seq[j]+.5
>
> #Defining the band width
> band<-subset(tbl,tbl$LAT>=lat_min & tbl$LAT<=lat_max)
>
> # Selecting the species of interest and
> # calculating average abundace measures
> species<-subset(band,band$SPCD==spcd_list[i,1])
>
> bands[j,i+1,1]<-mean(species$index)
> bands[j,i+1,2]<-mean(species$index1)
>
> } }
上記のアプローチは機能しますが、非常に時間がかかります。これを行うためのより良い方法があるかどうか疑問に思います。Zoo と rollapply は私が学んでいるものです。しかし、それを機能させることができませんでした。