【问题标题】:Define year for two digits year date format [duplicate]为两位数年份日期格式定义年份[重复]
【发布时间】:2017-01-04 09:00:29
【问题描述】:

假设我将以下日期从字符转换为 R 中的简单日期格式。

character_date <- "19-Jan-44"
date <- as.Date(strptime(x = as.character(character_date), format= "%d-%b-%y"))
> date
[1] "2044-01-19"

R 假设它是 2044 而不是 1944(这是期望的),我如何告诉 R 它实际上是哪一年?

非常感谢!

【问题讨论】:

  • 您需要提供关于它可以是 1944 还是 2044 的上下文
  • 那你如何显示2044年或1844年的日期呢?还是必须假设每个日期都属于 19 世纪?
  • 如果你总是假设 20 世纪,我想你可以把它嵌入到你的字符串中,比如as.Date(gsub("(.*)-(.*)", "\\1-19\\2", character_date), format= "%d-%b-%Y"),请不要在转换为Date 类时使用strptime /跨度>

标签: r


【解决方案1】:

我们可以创建一个函数来做到这一点

library(lubridate)
f1 <- function(x, year=1970){
   x <- dmy(x)
   m <- year(x) %% 100
   year(x) <- ifelse(m > year %% 100, 2000+m, 1900+m)
  x
}

f1(character_date)
#[1] "1944-01-19"

如果这总是有 19 作为年份的前缀

dmy(sub("-(\\d+)", "-19\\1", character_date))
#[1] "1944-01-19"

【讨论】:

    【解决方案2】:

    您可以将"-19" 附加到字符串并执行format = "%d-%b-y-%C"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 2018-04-05
      • 2015-06-20
      • 2017-01-27
      • 2017-12-20
      相关资源
      最近更新 更多