首页 > 解决方案 > 如何将混合数字和日期格式转换为单数格式

问题描述

我有一个从 excel 导入的数据集中的日期列,其中包含数字日期和 dmY 日期。此列当前结构为字符。我想将其格式化为 Ymd 日期列。

所以例如

dates <- c(25678, 34758, 32474, 23443, "02/06/1999")

date_data <- data.frame(data = dates)

#hopeful end product
"1970-04-20" "1995-02-28" "1988-11-27" "1964-03-07", "1999-06-02"

所有这些日期都使用 excel 中的原点“1899-12-30”

我试过弄乱lubridate,parse_date_time但没有这样的运气。

标签: rlubridate

解决方案


这将检查日期格式并应用相应的转换。如果您遇到更多格式,您将需要更多 else ifs,每种格式都有一个。

数据:

dates <- c(25678, 34758, 32474, 23443, "02/06/1999")

dates
[1] "25678"      "34758"      "32474"      "23443"      "02/06/1999"
as.vector(sapply( dates, function(x){
  if( grepl("^[0-9]+$", x) ){
    strftime(as.Date( as.integer(x), origin="1899-12-30" )) }
  else{ strftime(as.POSIXlt(x, format="%d/%m/%Y")) } } ))

结果:

[1] "1970-04-20" "1995-02-28" "1988-11-27" "1964-03-07" "1999-06-02"

推荐阅读