2012-08-15 21 views
11

Devo sostituire gli NA nell'oggetto raster (r) dall'esempio seguente.Come sostituire NA in un oggetto raster

library(raster) 
filename <- system.file("external/test.grd", package="raster") 
r <- raster(filename) 

Ho anche provato a rimuovere questi questi (e inserire il risultato in un data.frame), ma senza alcun risultato.

dfr <- as.data.frame(r, na.rm=T) 
summary(dfr) 
# test  
# Min. : 128.4 
# 1st Qu.: 293.2 
# Median : 371.4 
# Mean : 423.2 
# 3rd Qu.: 499.8 
# Max. :1805.8 
# NA's :6097 
+0

Hai provato "na.omit'? – seancarmody

+0

Sì, 'summary (as.data.frame (r, na.omit = T))' dice che ci sono 6097 'NA'. – ils

+0

Benvenuti in StackOverflow. +1 per [esempio riproducibile] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – Andrie

risposta

12

io non sono sicuro che abbia senso per rimuovere NA valori da un oggetto raster, ma si può facilmente sostituire.

Ad esempio:

oldpar <- par(mfrow=c(1, 2)) 
plot(r) 
r[is.na(r)] <- 250 
plot(r) 
par(oldpar) 

enter image description here


Se davvero si vuole, è possibile estrarre i valori raster in un vettore e quindi rimuovere i valori NA. (. Anche se, dal momento che si perdono le informazioni spaziali, non riesco a vedere come questo può essere utile)

r <- raster(filename) 

r <- values(r) 
head(r) 
[1] NA NA NA NA NA NA 

head(na.omit(r)) 
[1] 633.686 712.545 654.162 604.442 857.256 755.506 
21

Un approccio sicuro più memoria (per file di grandi dimensioni) sarebbe quella di utilizzare riclassificare:

library(raster) 
filename <- system.file("external/test.grd", package="raster") 
r <- raster(filename) 
rna <- reclassify(r, cbind(NA, 250)) 
+2

+1 per l'approccio di memoria efficiente! – ils

+0

Questo non sembra funzionare per NaN (vale a dire riclassificare (r, cbind (NaN, NA))) – kennyB

Problemi correlati