2013-05-08 8 views
10

Ich habe Daten im FormatVerrundungszeiten auf die nächste Stunde in R

time <- c("16:53", "10:57", "11:58") 

etc

Ich möchte eine neue Spalte schaffen, wo jeder dieser Zeiten auf die nächste Stunde gerundet. Ich kann nicht scheinen, dass der POSIX-Befehl für mich funktioniert.

as.character (Format (DATA2 $ time, "% H:% M"))

Fehler in format.default (Struktur (as.character (x), Name = Namen (x), dim = dim (x),.:? ungültig 'trimmen' Argument

allein Lassen Sie verwenden, um die Runde Befehl Kann mir jemand raten

+1

'format' verwendet wird, in die andere Richtung zu gehen (von einem Datum-Zeit zu einer bestimmten Darstellung.) Ich bin nicht t sicher, wenn es eine Klasse für eine teilweise Datum-Uhrzeit gibt, z. B. nur aus Stunden und Minuten bestehend. – Frank

+1

http://stackoverflow.com/questions/16041093/round-a-posix-date-and-time-posixct-to-a-date-relative-to-a-timezone –

+0

Etwas wie: 'as.POSIXlt (strptime (tt, Format = "% H:% M") + 30 * 60) $ Stunde '?? – Arun

Antwort

13
## Example times 
x <- c("16:53", "10:57", "11:58") 

## POSIX*t objects need both date and time specified 
## Here, the particular date doesn't matter -- just that there is one. 
tt <- strptime(paste("2001-01-01", x), format="%Y-%m-%d %H:%M") 

## Use round.Date to round, then format to format 
format(round(tt, units="hours"), format="%H:%M") 
# [1] "17:00" "11:00" "12:00" 
+0

Sie müssen nicht wirklich ein Datum hinzufügen, das aktuelle Datum wird automatisch hinzugefügt, wenn Sie 'strptime (x,"% H:% M ")' – eddi

+2

@eddi - Cool, aber jede Chance, die Sie bekommen könnte Ärger für bestimmte Zeiten an Tagen mit einer Sommerzeitverschiebung? (Ich * sagte * der Tag spielte keine Rolle, aber aus diesem Grund wählte ich einen, für den ich nicht glaube, dass irgendein Platz einen DLT-Shift hat ...) –

+0

Ich kann nicht verstehen warum - und ich habe es einfach überprüft es und es funktioniert normal so weit ich es sagen kann. – eddi