我有一堆植被趋势栅格,在1982年至2013年间每年有一层。我还有一些矢量中的数据,我想与栅格进行比较。不幸的是,这个矢量数据并不完整,有些年份没有值。
有没有办法制作一个新的堆栈,只有与我的vetor数据有值的年份相对应的栅格?我有180个向量,所以如果我能避免为每个向量手动执行此操作,我会很高兴。
我不知道怎么做,所以如果您有任何建议请分享。
以下是我的数据的示例:
#yearly vegetation trend residuals
res <- list.files(pattern="*res.tif")
s <- stack(res)
> s
class : RasterStack
dimensions : 2160, 4320, 9331200, 32 (nrow, ncol, ncell, nlayers)
resolution : 0.08333333, 0.08333333 (x, y)
extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
names : X1982res, X1983res, X1984res, X1985res, X1986res, X1987res, X1988res, X1989res, X1990res, X1991res, X1992res, X1993res, X1994res, X1995res, X1996res, ...
min values : -1646.886, -1783.155, -1597.452, -1296.460, -1339.577, -1396.953, -1147.745, -1135.821, -1245.651, -1239.484, -1271.816, -1326.402, -1119.192, -1251.991, -1137.646, ...
max values : 619.8672, 602.8412, 616.0391, 654.5453, 506.0248, 569.0380, 602.9570, 605.4675, 642.4062, 571.4812, 631.8979, 604.1268, 581.0545, 692.8349, 697.4185, ...
#table with vectors
vectors <- df[6:11,4:35]
> vectors
X1982 X1983 X1984 X1985 X1986 X1987 X1988 X1989 X1990 X1991
6 NA NA NA NA 26.90000 NA 28.0 25.85000 26.9000 29.60
7 24.5 25.10 25.1 28.15 35.85714 27.95 30.6 30.28750 37.6625 30.05
8 NA 31.00 NA NA NA 27.15 NA NA NA 26.30
9 NA NA NA NA 26.60000 NA 31.7 30.36667 34.5000 NA
10 NA NA NA NA 48.10000 NA 40.6 44.50000 NA 41.80
11 NA 34.35 NA 26.92 31.87500 NA 28.2 38.00000 NA 27.57
X1992 X1993 X1994 X1995 X1996 X1997 X1998 X1999 X2000 X2001
6 35.50 36.60 32.1 38.100 52.64000 NA 46.0 36.22 48.60000 35.36000
7 30.65 30.85 30.4 37.810 34.82500 34.775 39.2 33.15 36.88333 32.44800
8 NA NA 28.0 27.350 26.00000 25.800 24.0 26.00 24.90000 24.00000
9 36.10 NA 42.8 40.275 45.80000 46.200 46.2 NA 40.35000 41.28333
10 41.90 45.30 NA NA NA NA NA NA NA 57.50000
11 32.65 NA NA 32.940 39.23333 NA NA NA 33.41000 NA
X2002 X2003 X2004 X2005 X2006 X2007 X2008 X2009 X2010 X2011
6 35.34 45.24333 41.505 39.695 36.2450 30.015 32.3050 32.540 33.6350 34.21
7 30.90 32.65500 35.800 NA NA NA 36.1660 NA 35.3680 28.30
8 NA 27.40000 31.054 31.855 32.3725 32.695 32.8625 33.675 33.2875 28.80
9 34.08 18.81000 16.230 16.640 NA NA 31.7900 NA NA NA
10 NA 48.00000 43.000 NA NA NA NA NA NA NA
11 NA NA NA 41.300 NA NA NA NA 41.5575 NA
X2012 X2013
6 30.48 31.54
7 32.40 NA
8 29.04 27.00
9 NA NA
10 NA NA
11 NA NA
>
答案 0 :(得分:0)
虽然现在回答上述问题为时已晚,但我认为值得回答,以防其他人遇到类似问题。
对于这种问题,我认为您可以对向量进行过滤,仅保留要创建新栅格堆栈的年份。我认为可以根据他们拥有的数据类型和意图来操纵这一部分。他们所需要的只是拥有数年的载体。之后,他们可以按照以下方法对相应的栅格进行子集化。
sub <- raster::subset(rastStack, index) # here, rastStack is the raster stack and index is the vector of years, however the layers of raster stack should have year in the layer name.
如果要从栅格堆栈中的每个第i个栅格中生成一个栅格,则可以应用以下方法。例如,我有一个栅格堆栈,其中包含49年的月平均降水值。我想要的是在此期间每个月制作一个平均栅格,这样我平均只有49年才能拥有12个栅格。这意味着我的第一个栅格将是一月的平均值,使用49年中所有一月月份的平均值,其他月份的平均值相同,依此类推。
rasList <- list.files("your path of folder here", pattern = ".tif$", full.names = T) # take all rasters from a folder
rastStack <- stack(rasList)
mon <- seq(1,12, 1) # vector representing months
li <- 1:588 # nlyears in the raster stack. 12 month in a year, I had rasters for 49 years. therfore a total of 12*49 or 588 raster layers
for (ii in 1:length(mon)){
index <- li[seq(ii, length(li), 12)]
sub <- raster::subset(rastStack, index)
subMean <- calc(sub, fun = mean) # this can be any function
writeRaster(subMean, paste("your destination folder to save the output rasters", "month_", ii, ".tif", sep = ""))
}
或者,任何人都可能打算按顺序制作栅格堆栈。例如,该人可能想为第n个图层制作一个栅格堆栈。这意味着第一组堆栈可以是前10个栅格,第二组堆栈可以是后10个栅格,依此类推。在这种情况下,可以在此post中找到。