我有一个包含两列的数据框。日期,性别
我想将Date列更改为该观察的周开始。例如,如果Jun-28-2011是星期二,我想将其更改为Jun-27-2011。基本上我想重新标记日期字段,使得同一周内的两个数据点具有相同的日期。
我也希望能够每周一次,每月一次,特别是每季一次。
更新: 我们将其用作数据集。
datset <- data.frame(date = as.Date("2011-06-28")+c(1:100))
答案 0 :(得分:9)
我最近刚刚学到的一个方法就是使用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)
编辑:有趣的是,来自floor_date
的{{1}}似乎无法向下舍入到最接近的四分之一,但lubridate
中的同名函数却没有。
答案 1 :(得分:6)
看看?strftime
。特别是,以下格式:
%b
:缩写的月份名称 当前的语言环境。 (也匹配完整 输入名称。)
%B
:完整的月份名称 在当前的区域设置中。 (也是匹配 输入上的缩写名称。)
%m
:月份为十进制数字(01-12)。
%W
:一年中的一周作为十进制数 (00-53)使用星期一作为第一天 一周(通常是第一个 一年中的星期一作为第1周的第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"