2012-08-15 13 views
11

Muszę zastąpić NA w obiekcie rastrowym (r) z poniższego przykładu.Jak zamienić NA w obiekcie rastrowym

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

Próbowałem też usunąć te są (i umieść wynik w data.frame), ale bezskutecznie.

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

Czy próbowałeś 'na.omit'? – seancarmody

+0

Tak, 'summary (as.data.frame (r, na.omit = T))' mówi, że istnieje 6097 'NA'. – ils

+0

Witamy w StackOverflow. +1 dla [odtwarzalny przykład] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – Andrie

Odpowiedz

12

nie jestem pewien, że to ma sens, aby usunąć NA wartości z raster obiektu, ale można łatwo wymienić.

Na przykład:

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

enter image description here


Jeśli naprawdę chcesz, można wyodrębnić wartości rastra do wektora, a następnie usunąć wartości NA. (. Chociaż, ponieważ tracisz informacji przestrzennej, nie mogę zobaczyć, jak to może być pomocne)

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

bezpiecznego podejścia więcej pamięci (w przypadku dużych plików) byłoby użyć przekwalifikowania:

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

+1 dla efektywnego wykorzystania pamięci! – ils

+0

Nie wydaje się to działać dla NaN (to jest przeklasyfikować (r, cbind (NaN, NA))) – kennyB