Teilstring eines Datums löschen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
karhof

Teilstring eines Datums löschen

Beitrag von karhof »

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.
Dateianhänge
getData_test.txt
(670 Bytes) 77-mal heruntergeladen
weather_test.xlsx
(10.57 KiB) 73-mal heruntergeladen
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Teilstring eines Datums löschen

Beitrag von jogo »

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:

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
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:

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")
Wie soll es weitergehen :?: etwa so: :?:

Code: Alles auswählen

weatherData$Tag <- as.Date(weatherData$dat)
weatherData$Stunde <- difftime(weatherData$dat, weatherData$Tag, units="h", tz=" ")
Gruß, Jörg
Antworten