【问题标题】:lubridate to parse date column with multiple formats AND default to last day in monthlubridate 解析具有多种格式的日期列并默认为月份的最后一天
【发布时间】:2021-04-15 19:59:15
【问题描述】:

我正在尝试解析具有两种日期格式的向量,包括日期和不包括日期,因此只有在没有提供日期的情况下,日期才会默认为该月的最后一天。 我让每个组件独立工作,但不知道如何将它们组合在一起。 Reprex 在下面,我想要的输出是"2006-09-30 UTC" "2005-08-23 UTC"

感谢您的时间和帮助。

library(dplyr)
library(lubridate)

# Parse dates in different formats, and default to last of month if no date specified
lubridate::parse_date_time(
  c("September 2006", "August 23, 2005"),
  orders = c("my", "mdY")
)
#> [1] "2006-09-01 UTC" "2005-08-23 UTC"

lubridate::my("September 2006") %>% 
  ceiling_date("month") - 1
#> [1] "2006-09-30"

reprex package (v0.3.0) 于 2021-04-15 创建

【问题讨论】:

    标签: r date lubridate


    【解决方案1】:

    使用as.Date 转换为Date 时,基于NA 结果创建索引可能更容易

    library(dplyr)
    library(lubridate)
    i1 <- is.na(as.Date(v1, '%B %d, %Y'))
    

    使用case_when 中的索引将ceiling_date 应用于那些对NA 为TRUE 的元素,同时仅将mdy 应用于其余元素

    case_when(i1  ~ mdy(v1) %>% 
                       ceiling_date('month') -1, 
          TRUE ~  mdy(v1))
    #[1] "2006-09-30" "2005-08-23"
    

    数据

    v1 <-  c("September 2006", "August 23, 2005")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      • 2015-04-21
      相关资源
      最近更新 更多