R如何逐步添加向量的元素?

R how to add up elements of a vector step by step?

关于我在 R 中研究的空间数据时间序列,我有一个问题你可以帮我解决!

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

到目前为止我得到的是以下内容:

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

现在我想计算索引 - 在我的 rasterstack 中追踪每年的开始和结束 - 以此为每年建立平均值。因此我必须找出如何解决以下问题:

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

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

非常感谢您的提前帮助!

你可以试试这个:

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)]]]]

这不是手动计算每年的天数,而是创建一个包含您时间段内所有天数的向量,然后创建一个列表,其中每个元素都是该天数的索引向量年。然后,您可以使用此索引列表作为 rasterstack 调用的索引,并将每个 rasterstack 结果放入第二个列表的元素中。

这里是你如何做到这一点。 (1) 创建分组索引,以及 (2) 在 stackApply

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

有关数据

的示例,请参见?raster::stackApply