【问题标题】:changing date format with only months and year仅使用月份和年份更改日期格式
【发布时间】:2018-09-06 11:53:07
【问题描述】:

我有一列日期格式如下:

yyyymm (e.g. 201809)

我希望它们的格式如下:

mm.yyyy (e.g. 09.2018)

我试过了:

FF5factors$date <- strptime(FF5factors$date, format= "%Y%m")
format(FF5factors$date, format="%m.%Y")

但它只返回 NA 值。

【问题讨论】:

    标签: r date format


    【解决方案1】:

    怎么样:

    d <- '201809'
    format(as.Date(d,'%Y%M'),'%m.%Y')
    [1] "09.2018"
    

    【讨论】:

    • 给我以下错误信息: charToDate(x) 中的错误:字符串不是标准的明确格式
    • 很奇怪,对我来说它工作正常。您可以尝试使用as.Date.character() 而不是as.Date()。
    • @s_t 您的代码正在运行。但最后,输出不是日期格式。您的结果是以字符格式提供输出。所以使用 d&lt;-"201809"; paste(substr(d,5,6),substr(d,1,4),sep=".") 这样的粘贴功能并没有太大的不同
    • @maydin 你是完全正确的(感谢验证我的代码),但 OP 似乎对此并不感兴趣,他/她没有明确输出的类。 @G 的所有解决方案。格洛腾迪克的结果是"character",并且由于 OP 选择了 G. Grothendieck 的完整答案(我给 +1),这意味着它并不一定对此感兴趣。
    • @s_t 你是对的。当我试图在我的计算机上解决它时,我特别关注格式。所以从这个意义上说,实际上您的快速回答与批准的回答没有什么不同。
    【解决方案2】:

    这里有一些替代方案。该问题没有以可重复的形式提供日期,因此我们假设下面的第一行虽然前 4 个替代方案也适用于 date &lt;- "201809" 和 date &lt;- factor(201809) 。

    date <- 201809
    
    # 1
    sub("(....)(..)", "\\2.\\1", date)
    ## [1] "09.2018"
    
    # 2
    library(zoo)
    format(as.yearmon(format(date), "%Y%m"), "%m.%Y")
    ## [1] "09.2018"
    
    # 3
    paste(substr(date, 5, 6), substr(date, 1, 4), sep = ".")
    ## [1] "09.2018"
    
    # 4
    format(as.Date(paste0(date, "01"), "%Y%m%d"), "%m.%Y")
    ## [1] "09.2018"
    
    # 5
    sprintf("%02d.%d", date %% 100, date %/%100)
    ## [1] "09.2018"
    

    【讨论】:

    • library(zoo) format(as.yearmon(format(date), "%Y%m"), "%m.%Y") 工作得很好。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2021-04-09
    相关资源
    最近更新 更多