2016-08-01 45 views
0

Ich habe einen großen räumlichen Datensatz im Text. Ich muss degree minute.decimal Werte in Dezimalgrade umwandeln. mein Code wie folgt. Es funktioniert gut Werte außer 0 bis -1. Werte in 0 bis -1 konvertieren in positive Werte von as.numeric() Koordinatenumrechnungsverfahren ist in Ordnung, aber Problem ist, wie minus Null (-0) Werte in Iflese-Anweisung übergeben. Wie überwinde ich dieses Problem?R Minuszeichen fehlt beim Umwandeln von Zeichen in Zahlen von as.numeric

data <- c("-7ø12.2","-1ø23.0","-0ø50.3","0ø14.6","2ø59.7") 
# latitudes in degree minutes.decimal format 
lat1 <- as.numeric(gsub("ø.*$", "", data)) # substring befor ø 
lat2 <- as.numeric(sub(".*ø", "", data)) # substring after ø 
lat <- ifelse(lat1 < 0, lat1 - lat2/60, lat1 + lat2/60) 

LAT1 [1] -7 -1 0 0 2

+0

Das stellt ein mögliches Duplikat [Konvertieren von Geo-Koordinaten von Grad in Dezimalzahlen] (http : //stackoverflow.com/questions/14404596/converting-geo-coordinates-from-degree-to-decimal) – Uwe

+0

@UweBlock Hier ist die Frage nicht die Konvertierung von Grad zu Dezimal, aber vermeiden minus Nullwerte (0 bis -1) in ifelse Aussage positiv zu sein. – sudheera

Antwort

0

Sie sind für lat1 < 0 Prüfung aber lat1[3] ist 0 so schlägt der Test fehl, und Ihre ifelse trifft das Additionsergebnis. Sie scheinen zu hoffen, dass -0 bleibt negativ, aber das ist nicht, wie 0 funktioniert.

die Extraktion hinzufügen (das negative Vorzeichen):

neg <- substr(data, 1, 1) 
neg 
#> [1] "-" "-" "-" "0" "2" 

und Test auf, dass anstelle von

lat1 < 0
ifelse(neg == "-", lat1 - lat2/60, lat1 + lat2/60) 
#> [1] -7.2033333 -1.3833333 -0.8383333 0.2433333 2.9950000 
+0

@ Jonathan sehr hilfreiche Antwort. – sudheera