R如何逐步添加矢量元素?

问题描述 投票:0回答:2

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

我有一个巨大的日常数据(2001年至2015年= 14061层)。现在我想计算每个像素的每年平均值并将结果存储在一个图层中(结果应该是15层的rasterstack,每年一个)。问题是,我必须将闰年纳入我的研究......

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

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

但是,由于这对a **来说真的很痛苦,所以以自动方式做这件事会很好。你有什么建议吗?

非常感谢您的帮助!

r gis spatial raster
2个回答
0
投票

你可以试试这个:

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结果放入第二个列表的元素中。


2
投票

这是你如何做到这一点。 (1)创建分组索引,(2)在stackApply中使用该索引

idx <- rep(1:length(ts_years_length), ts_years_length)
r <- stackApply(rasterstack, idx, mean)

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

© www.soinside.com 2019 - 2024. All rights reserved.