2014-10-15 2 views
0

Как извлечь или подмножить растровый объект только к одной строке данных? У меня есть растр глобальных данных о температуре и вы хотите рассчитать среднемесячное значение в год для каждой долготы/столбца.R: извлечь широту из растра

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 ежемесячно.

+0

Возможно преобразовать каждый растровый слой в матрице (например, 'as.matrix (cru.tmp $ X1850. 01.16) '), чтобы упростить доступ к данным, которые вам нужны? 'crop' также может работать, но это может быть медленная операция. – hrbrmstr

+0

Я еще один шаг, используя 'getValuesBlock' –

ответ

1

Вы можете использовать базовую индексацию, чтобы получить одну строку или столбец.

library(raster) 
b <- brick(system.file("external/rlogo.grd", package="raster")) 
x4 <- b[,4] 
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]] 
     } 
    } 
} 
+0

не совсем правильную логику, это среднее всех лет, а не среднее для каждого года ... –

Смежные вопросы