【问题标题】:Keeping the class date for aggregated time series保留聚合时间序列的课程日期
【发布时间】:2015-03-31 22:15:55
【问题描述】:

我想聚合时间序列数据以获取每周数据,但这样做时时间变量的类变为“字符”而不是“日期”,因此失去了作为日期的任何酷特性。

这很烦人,尤其是当我需要绘制数据并使用中断和标签时。

这是我所面临的一个简短示例

# Storing some random daily data
require(plyr)
require(dplyr)
df = data.frame(date = seq.Date(from = as.Date('2013-01-01'),
                                to = as.Date('2014-12-31'),
                                by = 'day'),
                data = rnorm(365*2))

将数据聚合成一些每周数据

wdf = df %>%
    mutate(week = strftime(df$date, format = '%Y-%U')) %>%
    group_by(week) %>%
    summarise(wdata = max(data))

不幸的是,现在变量 week 不属于“Date”类。关于为 %Y-%V 格式的对象保留课程日期的可能性有什么想法吗?

提前致谢!

EB

【问题讨论】:

  • 日期分类变量是具有属性的整数。任何格式操作的结果都是字符分类对象。并且....您如何建议将 7 天间隔组保留为“日期”?
  • 好吧,其实我是在问。
  • 为什么要导入 plyr?你这里只需要 dplyr。
  • 到底要问什么?你希望星期是数字还是字符?周数究竟如何?根据 POSIX 标准,您希望它们为 0-53 吗?
  • @BondedDust 我希望以星期为日期,而不是整数或字符。

标签: r date format time-series week-number


【解决方案1】:

使用很棒的 lubridate 包。它有一个floor_date 函数,可以根据多个时间单位中的任何一个(包括您想要的周数)向下舍入日期。

library(lubridate)

wdf = df %>%
  mutate(week = floor_date(date, unit = 'week')) %>%
  group_by(week) %>%
  summarise(wdata = max(data))

【讨论】:

  • 我实际上已经尝试过类似的东西。问题是我想要的条形图的条形非常窄。我知道我可以改变宽度,而这正是我现在正在做的事情。我只是想知道是否有办法强制“%Y-%V”类型的字符串保留 Date 类。可能有一种技巧可以通过一周中的每一天复制每周汇总数据,然后沿着日期变量绘制。
猜你喜欢
  • 2016-01-13
  • 1970-01-01
  • 2018-01-14
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多