如何更改为年月周格式?

时间:2015-05-09 15:45:13

标签: r

我有年月日格式的日期,我想将其转换为年月周格式,如下所示:

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

1 个答案:

答案 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')