我有年月日格式的日期,我想将其转换为年月周格式,如下所示:
date dateweek
2015-02-18 -> 2015-02-8
2015-02-19 -> 2015-02-8
2015-02-20 -> ....
2015-02-21
2015-02-22
2015-02-23
2015-02-24 ...
2015-02-25 -> 2015-02-9
2015-02-26 -> 2015-02-9
2015-02-27 -> 2015-02-9
我试过
data$dateweek <- week(as.POSIXlt(data$date))
但是只返回没有相应年份和月份的几周。
我也尝试过:
data$dateweek <- as.POSIXct('2015-02-18')
data$dateweek <- format(data$dateweek, '%Y-%m-%U')
# data$dateweek <- format(as.POSIXct(data$date), '%Y-%m-%U')
但相应的列看起来很奇怪:
date datetime
2015-01-01 2015-01-00
2015-01-02 2015-01-00
2015-01-03 2015-01-00
2015-01-04 2015-01-01
2015-01-05 2015-01-01
2015-01-06 2015-01-01
2015-01-07 2015-01-01
2015-01-08 2015-01-01
2015-01-09 2015-01-01
2015-01-10 2015-01-01
2015-01-11 2015-01-02
答案 0 :(得分:8)
您需要使用'%Y-%m-%V
格式进行更改:
mydate <- as.POSIXct('2015-02-18')
> format(mydate, '%Y-%m-%V')
[1] "2015-02-08"
来自文档strptime
:
%V
ISO 8601中定义的十进制数字(00-53)中的一周。如果包含1月1日的一周(从星期一开始)在新的一年中有四天或更多天,那么它将被视为第1周。否则,它是上一年的最后一周,下一周是第1周。(接受但输入时忽略。)
还有(美国公约):
%U
一年中的星期几作为十进制数(00-53),使用星期日作为一周的第一天1(并且通常以一年的第一个星期日作为第1周的第1天)。美国公约。
这实际上取决于你想要用于哪种情况。
mydate <- as.POSIXct('2015-02-18')
> format(mydate, '%Y-%m-%U')
[1] "2015-02-07"
在你的情况下你应该这样做:
data$dateweek <- format(as.POSIXct(data$date), '%Y-%m-%U')