当日期为整数时在 R 中格式化日期

Formatting Dates in R when Dates are integers

我正在尝试在 R 中格式化数据集中的一些日期。日期是整数值。 例如,数据集中的一些日期是 10571、4786 和 82692,转换为 1971 年 1 月 5 日; 1986 年 4 月 7 日; & 1992 年 8 月 26 日。如何在 R 中将整数值更改为格式为“%Y-%m-%d”(1971-10-05、1986-04-07、1992-08-26)的日期?

好的,您必须考虑整数长度不同的可能性以及转换为日期的内容。假设所有年份的末尾都是两位数,并且正如您所说,在 20 世纪内,您可能会有一天或一个月的一位数或两位数。如果每个都有一个数字,我们会在前面加上一个“0”以放入标准格式。如果总共有五个数字,则一个值是个位数。如您所说,日期应假定为个位数,因此在开头添加“0”。但是,存在“10”的情况。假设月份没有 0 开头,那应该代表十月,所以将 0 添加到月份。

整个过程中,策略是将整数分成日期、月份、年份块,然后在前面加上适当的数字。然后重新组合成字符串并转换为日期。

# case of 4 digits
case_when(
nchar(date_integer) == 4 ~
    substring(date_integer, c(1,2,3), c(1,2,4)) %>% 
      paste0(c(0,0,19),.) %>% 
      paste(., collapse = "") %>% 
      as.Date(., format = "%m%d%Y", origin = "1970-01-01"),
# 5 digits
nchar(date_integer) == 5 ~ 
  # This accounts for October as a special case, so prepend 0 to dat
    case_when (
        grepl("0", substring(date_integer, 1,2)) ~
            substring(date_integer, c(1,3,4), c(2,3,5)) %>% 
              paste0(c("",0,19),.) %>% 
              paste(., collapse = "") %>% 
              as.Date(., format = "%m%d%Y", origin = "1970-01-01"), 
        # othewise add 0 to month
          TRUE ~ 
              substring(date_integer, c(1,2,4), c(1,3,5)) %>% 
                paste0(c(0,"",19),.) %>% 
                paste(., collapse = "") %>% 
                as.Date(., format = "%m%d%Y", origin = "1970-01-01")
    ) , 
nchar(date_integer) == 6 ~ 
    substring(date_integer, c(1,3,5), c(2,4,6)) %>% 
      paste0(c("","",19),.) %>% 
      paste(., collapse = "") %>% 
      as.Date(., format = "%m%d%Y", origin = "1970-01-01"),
TRUE ~ as.Date(NA)
)

测试了以上所有数字长度的变化并产生了正确的日期。