【问题标题】:Binning Dates in RR中的分箱日期
【发布时间】:2011-04-11 16:04:13
【问题描述】:

我在 R 中遇到日期和时间问题,但我希望这是一项相当基本的任务。

这是我的数据集:

> str(temp.df)
'data.frame':   74602 obs. of  2 variables:
 $ time : POSIXct, format: "2011-04-09 03:53:20" "2011-04-09 03:53:15" "2011-04-09 03:53:07" "2011-04-09 03:52:39" ...
 $ value: num  1 1 1 1 1 1 1 1 1 1 ...

> head(temp.df$time, n=10)
 [1] "2011-04-09 03:53:20 EDT" "2011-04-09 03:53:15 EDT" "2011-04-09 03:53:07 EDT" "2011-04-09 03:52:39 EDT"
 [5] "2011-04-09 03:52:29 EDT" "2011-04-09 03:51:56 EDT" "2011-04-09 03:51:54 EDT" "2011-04-09 03:51:46 EDT"
 [9] "2011-04-09 03:51:44 EDT" "2011-04-09 03:51:26 EDT"

为了方便……

> dput(head(temp.df$time, n=10))
structure(c(1302335600, 1302335595, 1302335587, 1302335559, 1302335549, 
1302335516, 1302335514, 1302335506, 1302335504, 1302335486), class = c("POSIXct", 
"POSIXt"), tzone = "")

我想要做什么:

  • 我怎样才能找到最小和最大日期/时间之间的小时数?
  • 使用 1 小时时间段创建数据摘要的最佳方法是什么?

您能提供的任何帮助将不胜感激

【问题讨论】:

  • 看看包装 zoo 的(优秀的)小插图——它就在里面。
  • 就个人而言,我发现通常避免时间比尝试将其转换为 R 友好格式更容易。我将日期分成列并使用原始数字而不是指日、月、年、小时、分钟、秒。

标签: datetime r


【解决方案1】:

使用正确的时间序列包zoo 和/或xts。这个例子直接来自aggregate.zoo() 的帮助页面,它每 10 分钟聚合一次 POSIXct 秒数据

 tt <- seq(10, 2000, 10)
 x <- zoo(tt, structure(tt, class = c("POSIXt", "POSIXct")))
 aggregate(x, time(x) - as.numeric(time(x)) %% 600, mean)

xts 中的 to.period() 函数也肯定是赢家。 SO 和 r-sig-finance 列表中有无数示例。

【讨论】:

  • 您能说明一下您的 mod 600 在做什么吗?桶是每小时一次,我用变量 x 看到。对于我来说,聚合行似乎对 x 数据所做的所有事情都是在每个存储桶的开始和结束处添加 47 秒。这有什么意义?
  • 查看评论:# aggregate POSIXct seconds data every 10 minutes
  • cut(time(x), breaks="10 mins") 是将第二个参数简化为聚合函数的好方法。在 zoo 包中的聚合函数的文档下有一个这样做的例子。 cran.r-project.org/web/packages/zoo/zoo.pdf
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 2015-08-24
  • 1970-01-01
  • 2021-12-09
相关资源
最近更新 更多