2016-07-27 33 views
0

Siehe ein Beispiel der Datei unten. Die Datei scheint in einem ArcGIS ascii-Format zu sein, liest aber alle Nullen, wenn Sie sie als Raster in ArcGIS oder R importieren. Ich möchte jede Textklasse (insgesamt 16) in numerische Form konvertieren, während nodata als beibehalten wird -9999. Die Datei ist 15 mb. Jede Hilfe wird geschätzt.Ich habe ein Raster (ASCII-Format) mit Textwerten. Wie konvertiere ich es in numerische Werte in R oder ArcGIS?

cols 1520
nrows 1550
xllcorner 7517937,93364
YLLCORNER -3.188.304,43924
Zellengröße 25
NODATA_VALUE -9999
"-9999" "SE" "SW" "N" "N"
„- 9999" "-9999" "N" "SE" "N"
"-9999" "-9999" "N" "SW" "N"

Antwort

1

Sie können wie etwas tun:

x <- readLines('file.asc') 
x <- gsub("N", 0, x) 
x <- gsub("S", 180, x) 
# etc. 
writeLines(x, 'newfile.asc') 
+0

Vielen Dank. Das funktioniert fast, aber es ersetzt bestimmte Muster in den Daten falsch. Zum Beispiel, wenn die Zeile: "N" NNE "NNW" S "-9999" sollte "4" "7" "-9999" lesen, sondern stattdessen etwas wie "4441" "4414" lesen "9" "-9999" Gibt es eine Möglichkeit, genaue Übereinstimmungen anzugeben, so dass "N" nur N ersetzt und nicht das N in NNE? Oder muss ich vielleicht das Trennzeichen angeben, wenn die Datei eingelesen wird? –

+0

Ok und nochmals danke @RobertH, ich habe dies behoben, indem ich festlege, dass die gesuchte Textzeichenfolge jedes Wort beginnen/beenden muss: x <-gbsub ("\\ bN \\ b", 0, x). Das einzige Problem ist jetzt, dass es immer noch jedes "Wort" als Textzeichenfolge speichert und nicht zu numerisch wird. Die Ausgabe ist also: "-9999" 4 "2" "1" "1" anstatt einfach -9999 4 2 1 1. –