我有一个栅格堆叠,包含84层,每层对应于1999年11月至2006年10月的1个月降雨量。我已经命名了在我的栅格堆栈199911到200610的层次,也就是年份,然后是月份。我也有一个空间点数据,其中每一行都有一个相同格式的日期。
我想从栅格堆叠中提取一行日期到前一个十月在那一行的空间位置的所有雨量之和。因此,如果一排的日期是20006 (2000年6月),它将在199910 (1999年10月)至20006年间将该行所在位置的所有降雨量加在一起。因为我有很多数据,所以我想要自动化这个过程。
我试着让这件事起作用,但没有joy。有人有小费吗?
发布于 2016-04-22 00:08:21
这里有一个选择:
library(raster)
# Vector of dates
dates <- format(seq(as.Date('1999/1/11'), as.Date('2006/1/10'), by='month'), '%Y%m')
# RasterStack with random data
s <- setNames(stack(replicate(length(dates), raster(matrix(runif(100), 10)))),
paste0('rain', dates))
# Create a SpatialPointsDataFrame with some random dates and coords
d <- data.frame(x=runif(10), y=runif(10), date=sample(dates, 10))
coordinates(d) <- ~x+y
# Split the spdf by date
d_by_date <- split(d, d$date)
# Extract values
rain_sum <- unsplit(lapply(d_by_date, function(x) {
# current year
y <- as.numeric(substr(x$date, 1, 4))
# current month
m <- as.numeric(substr(x$date, 5, 6))
# if month is after Oct, start from that year's Oct
# if month is before Oct, start from previous year's Oct
if(m < 11) y <- y-1
start_date <- as.Date(sprintf('%s/10/01', y))
# if start_date is earlier than first time slice, reset to first time slice
start_date <- max(min(as.Date(sub('rain', '01', names(s)), '%d%Y%m')), start_date)
end_date <- as.Date(paste0(x$date, '01'), '%Y%m%d')
# Sequence of dates to sum over
i <- format(seq(start_date, end_date, by='month'), 'rain%Y%m')
# Extract values and sum
sum(extract(s[[i]], x))
}), d$date)https://stackoverflow.com/questions/36722492
复制相似问题