2012-04-13 16 views
7

Ich habe einen Datenrahmen mit einer Spalte als Datum/Uhrzeit (intern als numerische gespeichert) und andere Spalten als numerische/Ganzzahl und ich möchte Daten gegen Datum/Uhrzeit darstellen.Plotten von Daten gegen die Zeit in R

Das Datum/die Uhrzeit im Datenrahmen wurde wie folgt ausgefüllt.

as.POSIXct(strptime(time, '%H:%M:%S %p %m/%d/%Y',tz='GMT')) 

class(table$time) ist numeric.

  1. Wie plotten und zeige ich die Daten in X-Achse als lesbare Datum Zeit in einem Format.
  2. Wie zeichne ich Teilmenge von Zeilen und nicht alle Zeilen Ex: Zeilen zwischen dateTime1 und dateTime2, wobei dateTime1 und dateTime2 Datum in einem bestimmten Format angegeben sind.
+1

Könnte es Ihnen möglich sein zu zeigen, wie Ihr Dataframe aussieht? Ich habe Schwierigkeiten zu verstehen, wie Ihre "Zeit" sowohl numerisch als auch in der Form "% H:% M:% S% p% m /% d /% Y" gleichzeitig sein kann. – plannapus

Antwort

7

Hier einige Dummy-Daten:

data <- structure(list(time = structure(c(1338361200, 1338390000, 1338445800, 1338476400, 1338532200, 1338562800, 1338618600, 1338647400, 1338791400, 1338822000), class = c("POSIXct", "POSIXt"), tzone = ""), variable = c(168L, 193L, 193L, 201L, 206L, 200L, 218L, 205L, 211L, 230L)), .Names = c("time", "variable"), row.names = c(NA, -10L), class = "data.frame") 
data 
       time variable 
1 2012-05-30 09:00:00  168 
2 2012-05-30 17:00:00  193 
3 2012-05-31 08:30:00  193 
4 2012-05-31 17:00:00  201 
5 2012-06-01 08:30:00  206 
6 2012-06-01 17:00:00  200 
7 2012-06-02 08:30:00  218 
8 2012-06-02 16:30:00  205 
9 2012-06-04 08:30:00  211 
10 2012-06-04 17:00:00  230 

in der Achse Datum und Uhrzeit Um Ihnen zu zeigen Funktion axis.POSIXct verwenden können:

plot(data, xaxt="n") 
axis.POSIXct(side=1, at=cut(data$time, "days"), format="%m/%d") 

Sie können mit at wo die Zecken fallen steuern (wie bei der regulären Funktion axis, außer hier ist sie mit Objekten der Klasse POSIXct zu versehen) und steuert, wie sie mit format angezeigt werden.

Soweit Subsetting betroffen ist, solange Ihre dateTime1 und dateTime2 Objekte auch POSIXct-Objekte sind, können Sie es tun, wie Sie jede andere Art von Subsetting tun würde.

dateTime1 <- strptime("00:00 05/31/2012", format="%H:%M %m/%d/%Y") 
dateTime2 <- strptime("3 Jun 2012 05-30", format="%d %b %Y %H-%M") 
data[data$time < dateTime2 & data$time > dateTime1, ] 
       time variable 
3 2012-05-31 08:30:00  193 
4 2012-05-31 17:00:00  201 
5 2012-06-01 08:30:00  206 
6 2012-06-01 17:00:00  200 
7 2012-06-02 08:30:00  218 
8 2012-06-02 16:30:00  205 
10

Sie auch ggplot2 nutzen könnten, insbesondere geom_point oder geom_line (beachten Sie, dass ich die Beispieldaten aus @plannapus verwenden):

require(ggplot2) 
theme_set(theme_bw()) # Change the theme to my preference 
ggplot(aes(x = time, y = variable), data = data) + geom_point() 

enter image description here

oder eine Leitungsgeometrie:

ggplot(aes(x = time, y = variable), data = data) + geom_line() 

enter image description here

ggplot2 erkennt automatisch, dass der Datentyp der X-Achse ein Datum ist, und zeichnet die Achse entsprechend.

+0

+1 tatsächlich viel bequemer als meins. Gibt es auch eine Möglichkeit, das Format der Etiketten oder deren Platzierung bei Bedarf zu kontrollieren? – plannapus

+1

Ja, Sie können 'scale_x_date' oder' scale_x_datetime' verwenden, um die Skalierung zu optimieren. In ihrer Dokumentation finden Sie einige Beispiele. –