2017-09-07 14 views
1

Ich versuche, eine lange Liste von Werten in einer Spalte von Stunden: Minuten: Sekunden in Sekunden zu konvertieren. Der Code, den ich unten habe, funktioniert gut, solange die Werte im H: M: S-Format sind, aber ich habe Werte in zufälligen Reihen, die nur im M: S-Format sind (also keine Stunden). Wenn ich versuche, den folgenden Code für sie auszuführen, erhalte ich offensichtlich einen NA für jeden dieser Werte. Gibt es eine Möglichkeit, dass ich nur nach den Werten im M: S-Format und nur im H: M: S-Format suchen und sie einzeln konvertieren kann? Muss ich einen Stundenwert in jedem der M: S Werte hinzufügen, damit ich alle auf einmal konvertieren kann? Mein Code unten:Stunden: Minuten: Sekunden bis Sekunden

as.numeric(strptime(df$x, format="%H:%M:%S") - as.POSIXct(format(Sys.Date())), units="secs") 

Example of data: 
    Time 
    12:22:05 
    42:44 

Example of data after running above: 
    Time 
    44525 
    NA 

Antwort

3

parse_date_time Versuchen Sie, während die lubridate Paket.

df$time <- parse_date_time(x = df$time, c("HMS","MS")) 
+0

Fyi, das Ziel ist, die Anzahl der Sekunden seit Mitternacht (scheinbare dank der Bearbeitung des OP gerade jetzt). – Frank

+0

Danke, ich glaube das sollte funktionieren. Wird die Antwort akzeptieren, sobald ich es ausgeführt habe! Ich suche eigentlich nur nach einer H: M: S-S-Konvertierung, nicht nur Sekunden seit Mitternacht. Ich habe ein paar Werte, die die Stunden über 24 haben, also denke ich an die Methode, die ich vorher verwendet habe, diese Werte würden nicht so gut funktionieren. – coderX

+0

'lubridate' hat eine Funktion' period_to_seconds', die eine Zeit benötigt und die Anzahl der Sekunden an einem Tag zurückgibt, den sie repräsentiert. Ich bin etwas verwirrt darüber, warum du Zeitwerte hast, die 24 überschreiten ... sind das nicht Zeiten, sondern Dauer? –

1

Ihr Vorschlag Stunden Wert der M hinzuzufügen: S-Format scheint auch recht einfach zu implementieren:

x = c("12:22:05", "42:44") 
x[nchar(x)<8] <- paste0("00:", x[nchar(x)<8]) 
as.numeric(strptime(x, format="%H:%M:%S") - as.POSIXct(format(Sys.Date())), units="secs") 
## 44525 2564 
Verwandte Themen