Seite 1 von 1

Uhrzeit in 24 h Format umwandeln

Verfasst: Mi Feb 05, 2020 2:32 pm
von Effigy
Hallo zusammen,

ich möchte die Uhrzeit in der Variable WSDede$Time in ein 24 h Format umwandeln, also z.B statt 06:30 p -> 18:30

Code: Alles auswählen

> str (WSDede$Time)
 chr [1:15994] "2:30 a" "3:00 a" "3:30 a" "4:00 a" "4:30 a" "5:00 a" "5:30 a" "6:00 a" "6:30 a" "7:00 a" "7:30 a" ...
Ich probiere es mit folgendem Code

Code: Alles auswählen

WSDede$Time <- strptime(WSDede$Time, format = "%H:%M")
und bekomme nun diesen quatsch:

Code: Alles auswählen

> str (WSDede$Time)
 POSIXlt[1:15994], format: "2020-02-05 02:30:00" "2020-02-05 03:00:00" "2020-02-05 03:30:00" "2020-02-05 04:00:00" "2020-02-05 04:30:00" ...
Ich möchte das aktuelle Datum da nich stehen haben und verstehe nicht wieso R das macht und wie ich das wegbekomme. Wäre für jede Hilfe wie immer dankbar³.

LG,
Max

Re: Uhrzeit in 24 h Format umwandeln

Verfasst: Mi Feb 05, 2020 3:15 pm
von bigben
Hi!

"5:30 a" erscheint mir ein sehr ungewöhnliches Format zu sein, deshalb würde ich eher nicht versuchen, eine fertige Umwandlungsfunktion zu finden, sondern selbst eine schreiben. Beim "Doppelte Einträge entfernen" Thread habe ich Dir ja schon die Funktionen nchar und substr gezeigt und wie man damit "a" und "p" am Ende erkennt. Diesmal würde ich Dich dann auf strsplit hinweisen, womit man die Zahl vor dem Doppelpunkt erkennen kann:

Code: Alles auswählen

bsp <- c("1:30 a", "2:30 a", "10:25 a", "6:00 p")
strsplit(bsp, ":", fixed=TRUE)
Jetzt müsste man je nachdem, ob hinten ein a oder ein p steht die Zahl vor dem Doppelpunkt lassen oder 12 hinzu addieren. Kriegst Du das hin?

Vorsicht bei Stunde 0 oder 12. Da war das mit dem ante und post irgendwie verwirrend. Da musst Du nochmal rauskriegen, wie das bei Dir genau codiert ist.

LG,
Bernhard

Re: Uhrzeit in 24 h Format umwandeln

Verfasst: Do Feb 06, 2020 11:55 am
von jogo
Hallo Max,

vielleicht könnte es so aussehen:

Code: Alles auswählen

D <- data.frame(Time=c("2:30 a", "3:00 a", "3:30 a", "4:00 a", "4:30 a", "5:00 a", 
                       "5:30 a", "6:00 a", "6:30 a", "7:00 a", "7:30 a", "8:00 a", "8:30 a", 
                       "9:00 a", "9:30 a", "10:00 a", "10:30 a", "11:00 a", "11:30 a", 
                       "12:00 p", "12:30 p", "1:00 p", "1:30 p", "2:00 p", "2:30 p", 
                       "3:00 p", "3:30 p", "4:00 p", "4:30 p", "5:00 p", "5:30 p", "6:00 p", 
                       "6:30 p", "7:00 p", "7:30 p", "8:00 p", "8:30 p", "9:00 p", "9:30 p", 
                       "10:00 p", "10:30 p", "11:00 p", "11:30 p", "12:00 a", "12:30 a", 
                       "1:00 a", "1:30 a", "2:00 a", "2:30 a", "3:00 a"), stringsAsFactors = FALSE)
S <- strsplit(D$Time, split=":| ")
M <- matrix(unlist(S), 3)
D$H <- as.numeric(M[1,])
D$M <- as.numeric(M[2,])
D$meri <- M[3,]

toH24 <- function(H, meri) {
  H[H==12 & meri=="a"] <- 0
  H[H<12 & meri=="p"] <- 12 + H[H<12 & meri=="p"] 
  H
}

D$H24 <- toH24(D$H, D$meri)
D
Gruß, Jörg