R:从栅格中提取纬度

时间:2014-10-15 10:47:12

标签: r netcdf r-raster

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

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个网格单元中的每一个。

3 个答案:

答案 0 :(得分:2)

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

library(raster)
b <- brick(system.file("external/rlogo.grd", package="raster"))
x4 <- b[,4]

答案 1 :(得分: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]]
      }
   }
}

答案 2 :(得分: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
相关问题