1

如何将栅格对象提取或子集化为一行数据?我有一个全球温度数据栅格,并想计算每个经度/列的每年平均月值。

library(ncdf4)
library(raster)

download.file("http://www.cru.uea.ac.uk/cru/data/temperature/CRUTEM.4.3.0.0.anomalies.nc"
              , destfile="CRUTEM.4.3.0.0.anomalies.nc", mode="wb")

cru.tmp <-  stack("CRUTEM.4.3.0.0.anomalies.nc")

# inspect elements
cru.tmp

# list all years
names(cru.tmp)

# plot a single year
plot(cru.tmp$X2008.01.16)

# find nrow for 67.5deg North
mylat <- rowFromY(cru.tmp, 67.5)

# extract the row
cru.tmp.67.5N <- getValuesBlock(test, row=mylat, nrows=1)

所以基本上我想为剩余的 72 个网格单元中的每一个提供 12 个月的平均值。

4

3 回答 3

2

您可以使用基本索引来获取单行或单列。

library(raster)
b <- brick(system.file("external/rlogo.grd", package="raster"))
x4 <- b[,4]
于 2015-05-17T03:48:58.833 回答
0

数据已经在 中cru.tmp.67.5N,但需要重新排列:

cru.tmp.67.5N_mean <- array(NA, c(72,12,165))

colnames(cru.tmp.67.5N_mean) <- c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", 
                    "Sep", "Oct", "Nov", "Dec")
rownames(cru.tmp.67.5N_mean) <- xFromCol(cru.tmp, col=1:ncol(cru.tmp))

for (i in 1:12){
  for (j in 1:72){
    for (k in 1:165){

    month <- seq(i,length(colnames(cru.tmp.67.5N)),12)
    cru.tmp.67.5N_mean[j,i,k] <- cru.tmp.67.5N[j,month[k]]
      }
   }
}
于 2014-10-15T13:26:12.250 回答
0

使用 cdo 从命令行执行这种操作很简单:

cdo monmean -zonmean CRUTEM.4.3.0.0.anomalies.nc  monzonmean.nc

zonmean 计算区域平均值,然后将其传送到 monmean 命令。这适用于所有年份,但如果您想要特定年份,则可以使用 selyear 命令,例如:

cdo monmean -zonmean -selyear,2008 CRUTEM.4.3.0.0.anomalies.nc  monzonmean2008.nc
于 2018-04-16T10:19:09.540 回答