如何更改为年月周格式?

问题描述:

我有日期的年,月,日的格式,我要转换为年,月,星期格式,像这样:如何更改为年月周格式?

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 

您需要使用'%Y-%m-%V格式更改:

mydate <- as.POSIXct('2015-02-18') 

> format(mydate, '%Y-%m-%V') 
[1] "2015-02-08" 

从文档strptime

年为含1月1日有四个或更多天在新的一年为ISO 8601定义。如果一周(周一开始)十进制数(00-53)的

%V

周,然后它被认为是1星期,否则,它是前一年的最后一周,下一周是1周(接受但被忽略的输入。)

而且也有(美国通用) :

%U

一周中的一周为十进制数(00-53),使用星期日作为一周中的第一天(通常以一年的第一个星期日作为第一周的第一天)。美国的公约。

这实际上取决于你想用于哪种情况。

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') 
+0

的行为很奇怪。往上看。 thx – Mamba

+0

有什么奇怪的呢?美国的惯例是不同的。您可能需要常规约定:'data $ dateweek 格式(as.POSIXct('2015-01-01'),'%Y-%m-%V') [1]“2015-01-01”' – LyzandeR

+0

奇怪的是数据$ week Mamba