Dies ist eine gute Frage, und hebt einige der Schwierigkeiten im Umgang mit Daten in R hervor. Das lubridate-Paket ist sehr praktisch, daher stelle ich unten zwei Ansätze vor, einen mit Basis (wie von @ RJ- vorgeschlagen) andere mit Lubridat.
Erstellen Sie die (ersten zwei Reihen), um den Datenrahmen in der ursprünglichen Nachricht:
foo <- data.frame(start.time = c("2012-02-06 15:47:00",
"2012-02-06 15:02:00",
"2012-02-22 10:08:00"),
duration = c(1,2,3))
Konvertieren in POSIXct und POSIXt Klasse (zwei Möglichkeiten, dies zu tun)
# using base::strptime
t.str <- strptime(foo$start.time, "%Y-%m-%d %H:%M:%S")
# using lubridate::ymd_hms
library(lubridate)
t.lub <- ymd_hms(foo$start.time)
Nun Extrakt Zeit als Dezimalstunden
# using base::format
h.str <- as.numeric(format(t.str, "%H")) +
as.numeric(format(t.str, "%M"))/60
# using lubridate::hour and lubridate::minute
h.lub <- hour(t.lub) + minute(t.lub)/60
zeigen, dass diese Ansätze sind gleich:
identical(h.str, h.lub)
Dann, eines der oben genannten Ansätze wählen Dezimalzahl Stunde foo$hr
zuzuweisen:
foo$hr <- h.str
# If you prefer, the choice can be made at random:
foo$hr <- if(runif(1) > 0.5){ h.str } else { h.lub }
dann zeichnen Sie die ggplot2 Paket mit:
library(ggplot2)
qplot(foo$hr, foo$duration) +
scale_x_datetime(labels = "%S:00")
die Bibliotheken 'lubridate' und' zoo' könnten für Sie hilfreich sein. aber in der Basis R, 'format (foo $ start.time, format = '% H: M')'. – Justin
Danke. Ein Problem mit 'format (foo $ start.time, format = '% H: M') ist, dass die Ausgabe im Zeichenformat ist. Ich möchte, dass die Ausgabe in irgendeiner Art von numerischem Format ist, so dass sie als x-Achse eines Plots verwendet werden kann. – andrewj
Es gibt viele Möglichkeiten. Wieder würde ich Sie auf "lubridate" oder [this post] hinweisen (http://stackoverflow.com/questions/7655514/how-do-i-plot-only-the-time-portion-of-a-timestamp- included-a-date) – Justin