如何将栅格对象提取或子集化为一行数据?我有一个全球温度数据的栅格,想要计算每个经度/列的每年平均月值。
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个网格单元中的每一个。
答案 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