使用Raster包R中的zApply将半小时值与每小时6小时相加

时间:2016-02-16 05:12:31

标签: r date sum raster

library(raster)
library(zoo)
library(xts)

我有一个大rasterBrick个对象(RB)和144 layers。每个图层在30分钟的时间步长之间与另一个图层分开。积累的开始时间是00:00:00–00:30:00 UTC。请使用UTC而不是CST

date30mins=<-seq(as.POSIXct("2015-04-01 00:00:00"), as.POSIXct("2015-04-03 23:59:59"), by="30 mins",tz="GMT") #length (date30mins)=144

即。 date30mins

 "2015-04-01 00:00:00 UTC"
 "2015-04-01 00:30:00 UTC" 
 "2015-04-01 01:00:00 UTC"
 "2015-04-01 01:30:00 UTC"
 "2015-04-01 02:00:00 UTC" 
 "2015-04-01 02:30:00 UTC" 
 "2015-04-01 03:00:00 UTC" 
 "2015-04-01 03:30:00 UTC"
 "2015-04-01 04:00:00 UTC" 
 "2015-04-01 04:30:00 UTC" 
 "2015-04-01 05:00:00 UTC" 
 "2015-04-01 05:30:00 UTC" and so on...

成为:dates6hourly

(i.e. sum values from 00:00:00 UTC to 05:30:00 UTC;06:00:00 UTC to 11:30:00 UTC)

`dates6hourly`=seq(as.POSIXct("2015-04-01 00:00:00"), as.POSIXct("2015-04-03 23:59:59"), by="6 hours",tz="GMT")

"2015-01-01 00:00:00 UTC" 
"2015-01-01 06:00:00 UTC" and so on        

如何使用zApply实现此目的?

我的数据集太大,无法通过dput制作可重现的示例,但可以在此处找到示例数据sample data set

修改

以下内容应该完成任务但我收到错误:

index=rep(seq(1,12,by=1),each=12)
ras <- setZ(RB,date30mins)
6hrly <- zApply(ras,by=index, FUN=sum);

Error: unexpected symbol in "6hrly"

可能zApply无法识别"index"

package::rts内,可以使用以下方式轻松完成:

rasrts=rts(x=RB,time=dates30mins)
agg <- period.apply(rasrts,index,sum)#rts

但我想使用raster包来实现。

1 个答案:

答案 0 :(得分:0)

我使用raster package stackApply函数获得了它。

库(光栅)     库(动物园)     库(XTS)

index=rep(seq(1,12,by=1),each=12)
ras <- setZ(RB,date30mins)
sixhrly <- stackApply(ras,indices=index, fun=sum);