r如何逐步添加向量的元素



关于我在R中调查的空间数据的时间,我有一个问题,您可以帮助我!

我有了大量的每日数据(2001年至2015年= 14061层)。现在,我想计算每个像素的平均值并将结果存储在一层中(结果应为每年15层的栅格堆栈)。问题是,我必须将leap年包括在我的研究中...

到目前为止我所拥有的是以下内容:

ts_years <- seq.Date(as.Date("2001/01/01"), as.Date("2015/01/01"), by = "year")
# create a vector with 15 elements for 15 years
ts_years_length <- sapply(ts_years, yearDays)
# calculate number of days for the specific years
ts_years_length
[1] 365 365 365 366 365 365 365 366 365 365 365 366 365 365 365

现在,我想计算索引 - 追逐我的栅格扇出的开始和每年的结束 - 在此帮助的情况下,每年都建立平均值。因此,我必须找出如何解决以下问题:

year_2001 <- rasterstack[[1:365]]
year_2002 <- rasterstack[[366:731]]
year_2003 <- rasterstack[[732:1097]]
# ...and so on

要这样做,我必须将创建的向量加起来如下:

ts_years_length_index <- c(1, ts_years_length[1],
                           ts_years_length[1] + 1, ts_years_length[1] + 1 + ts_years_length[2])
# ...and so on

但是,由于这确实是A **的痛苦,因此以自动化的方式执行此操作是很好的。你有什么建议吗?

非常感谢您提前的帮助!

这是您可以做到的。(1)创建一个分组索引,(2)在stackApply

中使用该索引
idx <- rep(1:length(ts_years_length), ts_years_length)
r <- stackApply(rasterstack, idx, mean)

有关数据的示例,请参见?raster::stackApply

您可以尝试以下方法:

require(lubridate)
ts_years <- seq.Date(as.Date("2001/01/01"), as.Date("2015/12/31"), by = "day")
lst<-list()
for (i in 2001:2015) lst[[as.character(i)]]<-which(year(ts_years)==i)
yearraster<-list()
for (i in 2001:2015) yearraster[[as.character(i)]]<-rasterstack[[lst[[as.character(i)]]]]

这不是计算每年的天数,而是创建时间段的所有天数,然后创建一个列表,其中每个元素是当年所有天数的索引的向量。然后,您可以将此索引列表用作您的栅格扇形调用的索引,然后将每个栅格框架结果放入第二个列表的元素中。

最新更新