【问题标题】:How to format the quarter date in R?如何格式化R中的季度日期?
【发布时间】:2021-07-10 19:41:59
【问题描述】:

我有一个df如下:

df

ID   Date
1    2000/01/12
2    2015/06/11
3    2013/09/10
4    2002/01/07
5    2006/04/05

我想用代码添加代表季度的第三列:

df$quarter <- paste(format(df$Date, "%y"), 
                  sprintf("%02i", (as.POSIXlt(df$Date)$mon) %/% 3L + 1L), sep="/")

并收到以下输出:

ID   Date          quarter
1    2000/01/12    00/04
2    2015/06/11    15/04
3    2013/09/10    13/04
4    2002/01/07    02/03
5    2006/04/05    06/02

我的问题是如何更改季度列的格式以获得以下输出:

ID   Date          quarter
1    2000/01/12    2000q4
2    2015/06/11    2015q4
3    2013/09/10    2013q4
4    2002/01/07    2002q3
5    2006/04/05    2006q2

我不知道如何正确修改我的代码!谢谢!

【问题讨论】:

    标签: r date format quarter


    【解决方案1】:

    我们可以使用zoo中的as.yearqtr,然后使用subQ后面的空格替换为q

    library(zoo)
    df$quarter <- sub("\\s+Q", "q", as.yearqtr(df$Date, '%Y/%d/%m'))
    df$quarter
    #[1] "2000q4" "2015q4" "2013q4" "2002q3" "2006q2"
    

    或者正如 @G.Grothendieck 在 cmets 中建议的那样

    df <- transform(df, Date = format(as.yearqtr(Date, '%Y/%d/%m'), "%Yq%q"))
    

    数据

    df <- structure(list(ID = 1:5, Date = c("2000/01/12", "2015/06/11", 
    "2013/09/10", "2002/01/07", "2006/04/05")),
    class = "data.frame", row.names = c(NA, 
    -5L))
    

    【讨论】:

    • 效果很好!惊人的解决方案!谢谢@akrun! :)
    • 或者像这样使用 %q 格式:transform(df, Date = format(as.yearqtr(Date, '%Y/%d/%m'), "%Yq%q"))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 2014-09-16
    • 2019-11-18
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多