在R中将顺序数字数据转换为时间格式

时间:2016-08-29 01:56:13

标签: r time ggplot2

假设我有一个带有列t的数据帧,其中包含数据集第一个点的频率为10 Hz的累积时间差。如何将其转换为Min:Second格式的R时间,以便它将以ggplots显示。我只会在x轴上每隔5分钟显示一次勾号,而在00:00,05:00,10:00等时间显示相应的时间。

示例:

# 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()

谢谢,

2 个答案:

答案 0 :(得分:1)

我认为最好通过POSIXct将值转换为带有虚拟日期的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

答案 1 :(得分:0)

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

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

对于第二部分,您可能希望在几小时前查看此问题/答案(包括评论)。他问了同样的问题。

R: Aggregating time series data returns NA

我每隔5分钟汇总一次他的数据:

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))
然后他说他正在密谋这样:

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