Ich habe eine Liste der Wetterstationen und ihrer Standorte nach Längen- und Breitengrad. Es gab Formatierungsprobleme und einige von ihnen haben Stunden und Minuten, während andere Stunden, Minuten und Sekunden haben. Ich kann das Muster mit Regex finden, aber ich habe Probleme beim Extrahieren der einzelnen Teile.R regex/gsub: Teil des Musters extrahieren
Hier Daten:
> head(wthrStat1)
Station lat lon
1940 K01R 31-08N 092-34W
1941 K01T 28-08N 094-24W
1942 K03Y 48-47N 096-57W
1943 K04V 38-05-50N 106-10-07W
1944 K05F 31-25-16N 097-47-49W
1945 K06D 48-53-04N 099-37-15W
ich so etwas wie dies möchte:
Station latHr latMin latSec latDir lonHr lonMin lonSec lonDir
1940 K01R 31 08 00 N 092 34 00 W
1941 K01T 28 08 00 N 094 24 00 W
1942 K03Y 48 47 00 N 096 57 00 W
1943 K04V 38 05 50 N 106 10 07 W
1944 K05F 31 25 16 N 097 47 49 W
1945 K06D 48 53 04 N 099 37 15 W
Ich kann Spiele zu diesem Regex erhalten:
data.format <- "\\d{1,3}-\\d{1,3}(?:-\\d{1,3})?[NSWE]{1}"
grep(data.format, wthrStat1$lat)
aber bin nicht sicher, wie man die einzelnen Teile in Spalten. Ich habe ein paar Dinge ausprobiert wie:
wthrStat1$latHr <- ifelse(grepl(data.format, wthrStat1$lat), gsub(????), NA)
aber ohne Glück.
Hier ist ein dput():
> dput(wthrStat1[1:10,])
structure(list(Station = c("K01R", "K01T", "K03Y", "K04V", "K05F",
"K06D", "K07G", "K07S", "K08D", "K0B9"), lat = c("31-08N", "28-08N",
"48-47N", "38-05-50N", "31-25-16N", "48-53-04N", "42-34-28N",
"47-58-27N", "48-18-03N", "43-20N"), lon = c("092-34W", "094-24W",
"096-57W", "106-10-07W", "097-47-49W", "099-37-15W", "084-48-41W",
"117-25-42W", "102-24-23W", "070-24W")), .Names = c("Station",
"lat", "lon"), row.names = 1940:1949, class = "data.frame")
Irgendwelche Vorschläge?
Haben Sie versucht * gruppieren * jede Spalte mit Pharentesis auf der Regex? –
@OscarMederos: Nein, wie würdest du das tun? – screechOwl
Ich weiß nicht, wie Regex in "R" funktioniert, aber in den meisten Sprachen können Sie Gruppen erstellen, indem Sie das einschließen, was Sie innerhalb der Pharentese benötigen. Wie 'id = (\ d +)'. Wenn Ihre Übereinstimmung 'ID = 1234' ist, ist die erste Gruppe '1234'. –