如何在R中的不同图层上运行不同的公式

时间:2019-01-25 16:25:21

标签: r raster layer r-raster

我下载了worlclim / BIO气候数据,该数据有16层。其中1-11层是温度数据。其余为降水量数据。检查文档时,应按不同的转换系数转换温度数据单位。 1-2,4-11层应除以10以转换摄氏度,而3-4层应除以100。为此,我编写了以下代码:

 temp1<-clim[[1:2]]/10
 temp2 <-clim[[5:11]]/10
 temp3<-clim[[3:4]]/100

 Stack them back according to the same order as they were in original data:
 clim <-stack(temp1,temp3,temp2)

我的问题是如何在不同的层上计算不同的公式并将其堆叠回原始顺序?我想知道另一种方法来执行这些步骤。

谢谢!

1 个答案:

答案 0 :(得分:1)

简便的方法可能是定义一个“除法因子”向量,然后将堆栈除以该向量。通过这种方式,您无需按“原始”顺序放置乐队:

library(raster)
a <- raster::raster(ncols = 10, nrows = 10)
a <- raster::init(a, runif)

# create a stack
b <- raster::stack(a,a,a,a,a,a)

# define vector of dividing factors
divs <- c(1,1,10,10,100,100)

# compute
c <- b / divs
c
class       : RasterBrick 
dimensions  : 10, 10, 100, 6  (nrow, ncol, ncell, nlayers)
resolution  : 36, 18  (x, y)
extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       :      layer.1,      layer.2,      layer.3,      layer.4,      layer.5,      layer.6 
min values  : 5.919103e-03, 5.919103e-03, 5.919103e-04, 5.919103e-04, 5.919103e-05, 5.919103e-05 
max values  :   0.99532098,   0.99532098,   0.09953210,   0.09953210,   0.00995321,   0.00995321