【问题标题】:R time series data aggregation non equal time stepsR时间序列数据聚合不相等的时间步
【发布时间】:2013-03-30 23:53:54
【问题描述】:

我有以下数据是雨量计读数的时间序列集合。时间戳是雨量计每次增加计数的时间,而体积是添加到桶中的雨水量。我需要将数据汇总到几个不同的类别中,即每小时、6 小时、每天、每周添加到桶中的总降雨量。我尝试使用围绕 StachOverflow 发布的其他一些数据聚合方法,但它们假定正常的收集间隔。我对 R 不是很好,所以如果这是对已经发布的代码的超级简单编辑,请原谅我。

我知道数据是来自 excel 的快照,但这只是为了在这个论坛中为视觉目的而设置格式,因为我不知道如何发布表格

附件是数据的CSV

Data File Here

【问题讨论】:

  • 看起来你有一分钟​​的时间步长。为什么不用 0 填补空白并使用您找到的其他方法之一?
  • 您是在寻找从零开始的滚动平均值还是聚合?您可能希望在测试中使用一些“累积和”来定义接近 6 小时的休息时间等。
  • 想要对这些值求和,至于用零填充,有一些每分钟有多个小节,比如最后的 6:33 和 6:34。
  • @DanTheMan 首先汇总这些,然后填补空白。无论如何,重复的时间戳似乎是一个错误。也许您想考虑是否应该删除这些重复项。
  • 查看 zoo 包中的 zoo-readzoo-faq 小插曲,讨论读取数据、聚合和设置网格。请注意,您将需要read.zoo(..., aggregate = sum)` 来考虑非唯一时间。

标签: r aggregate time-series


【解决方案1】:

一个选项是使用包 Lubridate:

library(lubridate)
timeseries <- read.csv("project1.csv", sep=",", header=T, dec=".")
timeseries[,1] <- mdy_hm(timeseries[,1])

日期已转换为 POSIXct,在 R 中得到广泛认可。 接下来将日期四舍五入到最接近的单位。 单位可以设置为例如:小时、天、月等。 四舍五入的日期存储在一个新的 data.frame 中,然后与原始 data.frame 连接。 最后一步是将值聚合到四舍五入的日期。

rdate <- ceiling_date(x=timeseries[,1],unit="hour")
temp <- cbind(rdate,timeseries)
timeseries_hour <- aggregate(x=temp[3],by=list(temp[,1]),FUN=sum)

部分结果:

head(timeseries_hour)
          Group.1 Ppt..Amount
1 1996-05-02 01:00:00        0.03
2 1996-05-02 02:00:00        0.02
3 1996-05-02 05:00:00        0.01
4 1996-05-02 06:00:00        0.04
5 1996-05-02 07:00:00        0.38
6 1996-05-02 08:00:00        0.13

【讨论】:

  • 这可行,但它会将小时数四舍五入,因此当这是第二个小时时,第一个小时将计算 1:04 和 1:19。需要弄清楚如何让它不四舍五入。 “timeseries[,1]
  • 您可以尝试使用 'ceiling_date(x=timeseries[,1],unit="hour")' 而不是 'round_date(x=timeseries[,1],unit="hour") '。你能说明你得到什么样的错误吗?
猜你喜欢
  • 2014-06-17
  • 2020-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 2018-06-24
相关资源
最近更新 更多