【问题标题】:single digit month format个位数月份格式
【发布时间】:2017-06-19 15:17:54
【问题描述】:

我有一个包含月份和年份的日期变量,其中月份是个位数(例如,这个月/年是“62017”,但 10 月是“102017”)。我需要最终格式为“2017 年 6 月 1 日”。我曾尝试使用 as.Date 进行转换,但它不起作用,因为 %m 需要两位数。

我的解决方法是在不以“102”(10 月)、“112”(11 月)或“122”(12 月)开头的日期前添加前导零。我也有一些我不得不忽略的 NA。代码:

index <- substr(ll$Maturity.Date,1,3) != 102 & substr(ll$Maturity.Date,1,3) != 112 & substr(ll$Maturity.Date,1,3) != 122 & !is.na(ll$Maturity.Date)
ll$Maturity.Date[index] <- paste0(0,ll$Maturity.Date[index])

从这里,我可以根据需要转换为其他格式。但是,我想知道除了硬编码之外是否有更好的方法来做到这一点,因为当使用 90 年代的历史数据或下世纪的数据时,这种代码会被破坏,这两者都是未来的可能性。

【问题讨论】:

  • 个位数天数如何编码? 2017 年 6 月 1 日,是“6117”吗?还是“60117”?
  • 没有天数编码。完整的价值是 myyyy 例如“62017”表示 6 月,“112017”表示 11 月,“12017”表示 1 月。
  • 如果nchar(date.field) == 5 则可以测试字符数而不是子字符串,然后将零粘贴到前面。
  • 您是否需要将最终日期格式设为6/1/2017?下面的答案没有给你这种格式...

标签: r date formatting


【解决方案1】:

使用sprintf 填充0 可能是最简单的。这是一种解决方案:

sprintf("%06.0f", as.numeric(temp))
[1] "062017" "102017"

然后将其与paste0 结合以添加日期(1)和as.Date 以获取

as.Date(paste0(sprintf("%06.0f", as.numeric(temp)),"-1"), "%m%Y-%d")
[1] "2017-06-01" "2017-10-01"

数据

temp <- c("62017", "102017")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-01
    • 2014-05-12
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多