如何按R中的任意日期对时间序列数据进行分组?

时间:2016-07-05 21:01:56

标签: r lubridate

我有一个data.frame,如下所示:

df <- data.frame(
  DateTime = seq(ISOdate(2015, 1, 1, 0), by = 15 * 60, length.out = 35040),
  kWh = abs(rnorm(35040, mean = 550, sd = 50))
)

和一个矢量如:

dates <- as.Date(c("2015-01-15", "2015-02-17", "2015-03-14", "2015-04-16", 
                   "2015-05-16", "2015-06-18", "2015-07-15", "2015-08-15",
                   "2015-09-16", "2015-10-13", "2015-11-17", "2015-12-17"))

我想要做的是向df添加一列,指示每个条目归因于哪个会计期间。例如,从数据开头到2015-01-14最后一个条目的每个条目都将被赋予201501的值,因为它们归因于2015年1月的会计期间。同样,从2015-01-15到2015-02-16的最后一个值的每个值都将被赋予201502的值。

我希望有一个使用lubridate的解决方案,因为我不想转换为基于xtszoo的对象。性能也有些重要,因为我必须为几百个这样的数据集执行此操作。

1 个答案:

答案 0 :(得分:0)

我找到了答案,我没有意识到cut也适用于POSIXct个对象。

df$Period <- cut(df$DateTime, breaks = as.POSIXct(dates), 
                 labels = 201502:201512)

dates转换为POSIXct对象非常重要,否则cut会抛出一条错误消息,指出它们没有正确格式化。