Hallo Community,
ich habe folgendes Problem: ich möchte bei einem Datumsvektor den Substring ":00Z" bei allen Elementen löschen um dann danach das Datum&Zeitangabe in eine einmalige Zahl (datenumber) umzuwandeln. Das Datumsformat im angehangener Excel-Datei ist z.B.:
"2014-01-01 00:00:00Z". Wenn ich mit Hilfe von gsub() ":00Z" lösche (durch " " ersetze), bleibt mir aber leider der Spaltenvektor nicht mehr erhalten, mit dem ich ja weiterarbeiten wollte. Stattdessen erhalte ich einen large Character, s. Z. 17.
Die .xlsx und den Code als .txt hänge ich an. Ich arbeite mit RStudio. Der Code ist kommentiert. Besten Dank und entschuldigt die Anfängerfrage!
Ich steige gerade von matlab auf R um.
Teilstring eines Datums löschen
Teilstring eines Datums löschen
- Dateianhänge
-
- getData_test.txt
- (670 Bytes) 77-mal heruntergeladen
-
- weather_test.xlsx
- (10.57 KiB) 73-mal heruntergeladen
Re: Teilstring eines Datums löschen
Hallo karhof,
willkommen im Forum.
IMHO hättest Du auch sehr gut substr() (bzw. substring()) einsetzen können, um den gewünschten Teil rauszuschneiden.
... oder bei sub() oder gsub() den Parameter fixed=TRUE setzen.
Zum Beispiel könnte der entscheidende Teil so aussehen:Noch eine kleine Anmerkung:
R unterscheidet nicht zwischen Zeilen- und Spaltenvektor. Es gibt einfach nur Vektoren (als Objekte, die in einer Dimension indizierbar sind).
Wenn man explizit so etwas wie Zeilen- oder Spaltenvektoren haben möchte, muss man mit zweidimensionalen Objekten arbeiten - also mit Matrizen, die dann nur eine Zeile bzw. Spalte beinhalten.
Bei manchen Funktionen/Operationen nimmt R selber eine Interpretation für einen Vektor vor (ob Zeile oder Spalte); in einem solchen Fall empfiehlt sich eine Kontrolle, ob die richtige Interpretation verwendet wird.
neue Version, man kann das Ausschneiden des Datumstrings auch gleich der Umwandel-Funktion überlassen:
Wie soll es weitergehen etwa so:
Gruß, Jörg
willkommen im Forum.
IMHO hättest Du auch sehr gut substr() (bzw. substring()) einsetzen können, um den gewünschten Teil rauszuschneiden.
... oder bei sub() oder gsub() den Parameter fixed=TRUE setzen.
Zum Beispiel könnte der entscheidende Teil so aussehen:
Code: Alles auswählen
##load weather data
library(readxl)
weatherData = read_excel("weather_test.xlsx")
str(weatherData) ## Kontrolle der Struktur
names(weatherData) <- c("Datum", "GradC", "Rain") ## Namen setzen
#repair 1st date column: delete from the date the following partial string ':00Z'
#weatherDataDate <- weatherData[,1]
# weatherDataWeather <- weatherData[,2:3]
##### besser: man hält die Daten im Dataframe
#weatherDataDate <- gsub(":00Z", " ", weatherDataDate)
#using gsub I just wanted to get rid of ":00Z", which worked, but now weatherDataDate is not a column vector anymore.
#How can I get it back into a column vector?
weatherData$Datum <- substr(weatherData$Datum, 1, 16)
head(weatherData$Datum) ## Kontrolle
R unterscheidet nicht zwischen Zeilen- und Spaltenvektor. Es gibt einfach nur Vektoren (als Objekte, die in einer Dimension indizierbar sind).
Wenn man explizit so etwas wie Zeilen- oder Spaltenvektoren haben möchte, muss man mit zweidimensionalen Objekten arbeiten - also mit Matrizen, die dann nur eine Zeile bzw. Spalte beinhalten.
Bei manchen Funktionen/Operationen nimmt R selber eine Interpretation für einen Vektor vor (ob Zeile oder Spalte); in einem solchen Fall empfiehlt sich eine Kontrolle, ob die richtige Interpretation verwendet wird.
neue Version, man kann das Ausschneiden des Datumstrings auch gleich der Umwandel-Funktion überlassen:
Code: Alles auswählen
library(readxl) ##load weather data
weatherData <- read_excel("weather_test.xlsx")
str(weatherData) ## Kontrolle der Struktur
names(weatherData) <- c("Datum", "GradC", "Rain") ## Namen setzen
weatherData$dat <- strptime(weatherData$Datum, format="%F %R")
Code: Alles auswählen
weatherData$Tag <- as.Date(weatherData$dat)
weatherData$Stunde <- difftime(weatherData$dat, weatherData$Tag, units="h", tz=" ")