Ich hänge seit Tagen an einem Problem, probiere immer wieder neue Befehle aus, stehe aber mittlerweile am Ende und hoffe, dass ihr euch vielleicht mal kurz meines Problems annehmt :)
(ich bin leider kein großes R-Ass, bin aber gerade dabei es zu lernen, um zukünftig weiter damit arbeiten zu können, daher verzeiht mir bitte meine evtl. falsche Begriffswahl)
Ich habe 10 .asc Dateien (die ich normalerweise in GIS-Programmen zur Visualisierung (SAGA oder ArcMap) öffne und bearbeite.
In diesen Dateien möchte ich den vorgegebenen Code ändern, der den einzelnen Rasterzellen sagt, welche Information dahinter steht (Grad der Oberflächen-Schneebedeckung). Es gibt die zahlen „0“, „1“, „11“, „37“, „100“ etc. aber mich interessieren nur „25“ und „200“, die mir sagen „kein Schnee“, bzw. „Schnee“. Alles andere sagt mir nur „no data“ und ist für mich uninteressant.
Daher möchte ich diese Werte ändern. Den Wert „25“ in den Wert „1“ und den Wert „200“ in „2“. Alles andere möchte ich mit „0“.
Eingelesen habe ich die Dateien mit:
Code: Alles auswählen
Tag15_01 <- raster("Outputs/Ascis/A2015001.asc")
Tag15_02 <- raster("Outputs/Ascis/A2015002.asc")
Tag15_03 <- raster("Outputs/Ascis/A2015003.asc")
Tag15_04 <- raster("Outputs/Ascis/A2015003.asc")
...
Bei str(Tag15_01) kommen dann diese Infos (In der Environment unter Values, betitelt mit „Formal class Raterlayer“):
Code: Alles auswählen
> str(Tag15_01)
Formal class 'RasterLayer' [package "raster"] with 12 slots
..@ file :Formal class '.RasterFile' [package "raster"] with 13 slots
.. .. ..@ name : chr "/Volumes/USB DISK/RSoSe18/R3/Daten/WD_HA/Outputs/Ascis/ A2015001.asc"
.. .. ..@ datanotation: chr "FLT4S"
.. .. ..@ byteorder : chr "little"
.. .. ..@ nodatavalue : num 255
.. .. ..@ NAchanged : logi FALSE
.. .. ..@ nbands : int 1
.. .. ..@ bandorder : chr "BIL"
.. .. ..@ offset : int 6
.. .. ..@ toptobottom : logi TRUE
.. .. ..@ blockrows : int 0
.. .. ..@ blockcols : int 0
.. .. ..@ driver : chr "ascii"
.. .. ..@ open : logi FALSE
..@ data :Formal class '.SingleLayerData' [package "raster"] with 13 slots
.. .. ..@ values : logi(0)
.. .. ..@ offset : num 0
.. .. ..@ gain : num 1
.. .. ..@ inmemory : logi FALSE
.. .. ..@ fromdisk : logi TRUE
.. .. ..@ isfactor : logi FALSE
.. .. ..@ attributes: list()
.. .. ..@ haveminmax: logi FALSE
.. .. ..@ min : num Inf
.. .. ..@ max : num -Inf
.. .. ..@ band : int 1
.. .. ..@ unit : chr ""
.. .. ..@ names : chr ""
..@ legend :Formal class '.RasterLegend' [package "raster"] with 5 slots
.. .. ..@ type : chr(0)
.. .. ..@ values : logi(0)
.. .. ..@ color : logi(0)
.. .. ..@ names : logi(0)
.. .. ..@ colortable: logi(0)
..@ title : chr(0)
..@ extent :Formal class 'Extent' [package "raster"] with 4 slots
.. .. ..@ xmin: num 410722
.. .. ..@ xmax: num 469563
.. .. ..@ ymin: num 3065488
.. .. ..@ ymax: num 3106260
..@ rotated : logi FALSE
..@ rotation:Formal class '.Rotation' [package "raster"] with 2 slots
.. .. ..@ geotrans: num(0)
.. .. ..@ transfun:function ()
..@ ncols : int 127
..@ nrows : int 88
..@ crs :Formal class 'CRS' [package "sp"] with 1 slot
.. .. ..@ projargs: chr NA
..@ history : list()
..@ z : list()
Dann habe ich es auch mit einlesen über folgenden Codes versucht:
1.
Code: Alles auswählen
Tag15_01_2 <- read.table("/Volumes/USB DISK/RSose18/R3/Daten/WD_HA/Outputs/Ascis/MOD10A1_A2015001_h25v06_005_2015006011548.asc", header=TRUE, sep=' ')
2.„Fehler in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
Zeile 6 hatte keine 2 Elemente“
Code: Alles auswählen
Tag15_01 <- paste(system.file(package = "adehabitat"),
"Outputs/Ascis/A2015001.asc", sep = " ")
T01 <- import.asc(Tag15_01)
Aber vielleicht ist das auch egal, und ich könnte es auch mit der Funktion raster() weiter bearbeiten, mit der es ja geklappt hat.
Folgende Versuche habe ich dann unternommen, um den Code zu ändern:
1.
Code: Alles auswählen
recode()
recode(Tag15_01, "50"="0", as.numeric=TRUE)
recode(Tag15_01,`25` = "1", `200` = "2", `else` = "0")
recode(Tag15_01, "c(0,1,11,37,39,50,100,254)='0'; 25='1'; 200='2")
Code: Alles auswählen
Tag15_06@data[Tag15_06@data==50]<-0
Code: Alles auswählen
Tag1 <- replace(Tag15_01, Tag15_01 == "50", "0")
# Fehlermeldung: Vergleich (1) ist nur für atomare und Listentypen möglich
Code: Alles auswählen
Tag1 <- lapply(Tag15_01, function(x) ifelse(x=="50", "0", x))
Die Umkodierung benötige ich, damit ich im Folgenden (vor allem auch, wenn ich alle .asc-Dateien zusammengefügt habe) den Tag mit der höchsten Schneebedeckung herausfinden kann und einen Regression Tree zur Veranschaulichung erstellen kann.
Über Hilfe wäre ich sehr sehr dankbar! Da ich vor Fehlermeldungen schon ganz eRschöpft bin ... ;)