【问题标题】:Convert sequential numeric data into time format in R在 R 中将顺序数值数据转换为时间格式
【发布时间】:2016-08-29 01:56:13
【问题描述】:

假设我有一个包含 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()

谢谢,

【问题讨论】:

  • lubridate 是进行转换的最简单方法

标签: r time ggplot2


【解决方案1】:

我认为通过difftime 将值转换为具有虚拟日期的POSIXct 类会更好。

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)

【讨论】:

  • 正确。非常感谢。
【解决方案2】:
DF = data.frame(t = seq(0, 2000, by = 0.1), data = runif(n = 20001))

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

对于第二部分,您可能想查看几个小时前的这个问题/答案(包括 cmets)。他问了完全相同的问题。

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"))

【讨论】:

  • 嘿,谢谢你的例子。尽管它确实将 t 列转换为某种时间,但我无法绘制它。我不明白另一个问题和答案。顺便说一下,为了使示例更好,我对其进行了一些更改。
  • 我意识到 ms 没有做我想做的事。 t 值变得像“999M 7S”“999M 8S”“999M 9S”,我错了,也不是我想要的。数据长度为 33 分钟。
  • @Sean Reddy;您的代码无法正确转换数据。
  • @SeanReddy;嗯,我的评论是关于你的第一个代码块。至少在我的环境中,原始 DF$t 是 0.0、0.1、0.2、0.3 ~,但 ms(DF$t) 返回 0s、1s、2s、3s、~。
猜你喜欢
  • 2014-09-13
  • 2015-03-18
  • 2022-01-22
  • 1970-01-01
  • 2017-12-13
  • 2022-11-01
  • 2014-08-21
  • 1970-01-01
相关资源
最近更新 更多