【问题标题】:How to change to Year Month Week format?如何更改为年月周格式?
【发布时间】:2015-07-20 10:32:23
【问题描述】:

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

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

【问题讨论】:

    标签: r


    【解决方案1】:

    你需要使用'%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 日的那一周(从星期一开始)在新年中有 4 天或更多天,则将其视为第 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')
    

    【讨论】:

    • 这有什么奇怪的?美国的惯例是不同的。您可能需要常规约定:data$dateweek &lt;- format(as.POSIXct(data$date), '%Y-%m-%V'),即使用%V 而不是%U&gt; format(as.POSIXct('2015-01-01'), '%Y-%m-%V') [1] "2015-01-01"
    • 奇怪的是 data$week
    • 那和这个有什么不同呢? format(as.POSIXct('2015-01-01'), '%Y-%m-%V') [1] "2015-01-01"。另外,week 来自哪个包?
    • 我只有 require(xts) 在使用 require(lubridate)
    • 来自lubridate。如果你输入?week,你可以看到周是如何计算的。它与%V 格式仅略有不同。我建议你使用它,即data$dateweek &lt;- format(as.POSIXct(data$date), '%Y-%m-%V')。实际上,在您的情况下,两者的计算应该是相同的(使用 %V 格式)。
    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    相关资源
    最近更新 更多