【问题标题】:Bucketing data into weekly, bi-weekly, monthly and quarterly data in R在 R 中将数据存储为每周、每两周、每月和每季度的数据
【发布时间】:2011-06-28 15:00:43
【问题描述】:

我有一个包含两列的数据框。日期、性别

我想将日期列更改为该观察的一周开始。例如,如果 Jun-28-2011 是星期二,我想将其更改为 Jun-27-2011。基本上我想重新标记日期字段,以便同一周内的两个数据点具有相同的日期。

我还希望能够按周或按月,特别是按季度进行。

更新: 让我们将其用作数据集。

datset <- data.frame(date = as.Date("2011-06-28")+c(1:100))

【问题讨论】:

  • 代表 963 我原以为你可以写一个至少包含一些示例数据的问题,甚至可能是一些示例代码来显示你已经尝试过的内容。
  • 我添加了一个示例数据集

标签: r date


【解决方案1】:

我最近学到的一个巧妙的方法是使用lubridate 包:

library(lubridate)
datset <- data.frame(date = as.Date("2011-06-28")+c(1:100))
#Add 1, since floor_date appears to round down to Sundays
floor_date(datset$date,"week") + 1

我不确定如何进行双周分箱,但使用各自的 base 函数可以轻松处理每月和每季度:

quarters(datset$date)
months(datset$date)

编辑:有趣的是,lubridate 中的 floor_date 似乎无法向下舍入到最接近的四分之一,但 ggplot2 中的同名函数可以。

【讨论】:

  • 从 1.5 版开始,Lubridate 可以按季度进行四舍五入,但据我所知,不会到 2 周。请注意, floor_date() 保留时区信息,因此如果您使用日期,例如直方图箱,“美国东部时间 3 月 1 日”与“美国东部时间 3 月 1 日”不同。 :(
【解决方案2】:

看看?strftime。特别是以下格式:

%b: 月份名称的缩写 当前语言环境。 (也完全匹配 输入名称。)

%B: 全月名 在当前语言环境中。 (也匹配 输入时的缩写名称。)

%m:十进制数字 (01–12) 的月份。

%W: 一年中的周数为十进制数 (00–53) 使用星期一作为第一天 一周(通常与第一个 一年中的星期一作为一周的第 1 天 1)。英国公约。

例如:

> strftime("2011-07-28","Month: %B, Week: %W")
[1] "Month: July, Week: 30"

> paste("Quarter:",ceiling(as.integer(strftime("2011-07-28","%m"))/3))
[1] "Quarter: 3"

【讨论】:

    猜你喜欢
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多