2016-08-29 14 views
1

Angenommen, ich habe ein Datenframe mit einer Spalte t, die aus kumulativen Zeitunterschieden von Sekunden vom ersten Punkt des Datensatzes mit einer Frequenz von 10 Hz besteht. Wie kann ich dies in R-Zeit im Min: Second-Format konvertieren, so dass es in ggplots angezeigt wird. Ich zeige nur alle 5 Minuten ein Häkchen auf der X-Achse und die entsprechende Zeit in 00:00, 05:00, 10:00 Uhr usw.Konvertieren sequenzielle numerische Daten in Zeitformat in R

Beispiel:

# t columns is in seconds, thus 2000 seconds makes 33.33 minutes 
# Last tick value on the x axis I will show is 30:00 
d1 = 10 + runif(n = 5000) 
d2 = 20 + runif(n = 5000) 
d3 = 30 + runif(n = 5000) 
d4 = 40 + runif(n = 5001) 
d = c(d1,d2,d3,d4) 
t = seq(0, 2000, by = 0.1) 
DF = data.frame(t = t, d = d) 
ggplot(data = DF, aes(x = t, y = d)) + geom_line() 

Danke,

+1

'lubridate' ist der einfachste Weg, um die Umwandlung –

Antwort

1

Ich denke, es wäre besser, Konvertieren Sie Werte in POSIXct Klasse mit Dummy-Datum via difftime.

DF$min_sec <- as.POSIXct("2016-01-01") + as.difftime(DF$t, unit="secs") 

ggplot(DF, aes(x = min_sec, y = d)) + geom_point() + 
    scale_x_datetime(date_breaks = "5 min", date_labels = "%M:%S", minor_breaks=NULL) 

enter image description here

+0

Spot auf. Ich danke dir sehr. – ilyas

0
DF = data.frame(t = seq(0, 2000, by = 0.1), data = runif(n = 20001)) 

DF$t <- lubridate::ms(DF$t) 

Für den zweiten Teil Sie diese Frage/Antwort wünschen könnte (einschließlich Kommentaren) zu überprüfen, von ein paar Stunden. Er stellte genau die gleiche Frage.

R: Aggregating time series data returns NA

ich aggregiert seine Daten alle 5 Minuten wie folgt aus:

library(xts) 
    mydata <- read.csv("data.csv") 
    times  <- mydata$Time 
    X   <- as.POSIXct(times) 
    X   <- as.xts(X) 
    period.apply(mydata$T1, INDEX = endpoints(X, "minutes", 5), function(x) mean(x, na.rm=T)) 

dann sagte er, er war es so Plotten:

DataTable <- table(cut(data, breaks="5 mins")) 
+0

Hey Dank für das Beispiel zu tun. Obwohl es eine Spalte in irgendeine Art von Zeit umwandelte, konnte ich es nicht darstellen. Ich habe die andere Frage nicht verstanden und geantwortet. Nebenbei, um das Beispiel schöner zu machen, habe ich es ein bisschen verändert. – ilyas

+0

Ich erkannte ms tut nicht was ich will. Die t Werte werden wie "999M 7S" "999M 8S" "999M 9S", was ich falsch mache, und auch nicht was ich will. Die Daten sind 33 Minuten lang. – ilyas

+0

@Sean Reddy; Ihr Code kann Daten nicht korrekt konvertieren. – cuttlefish44

Verwandte Themen