【问题标题】:Extract end of month date from file path从文件路径中提取月末日期
【发布时间】:2021-09-11 10:08:44
【问题描述】:

我的文件路径如下所示:

path<-"C:/My files/Summer/2021 Holiday/2021/April"

我的目标是编写一个代码,根据“2021”和“April”部分提取月末日期,格式如下: 30.04.2021

我试过了:

year_month&lt;-tail(unlist(strsplit(path, "/")),2)

得到了这个,不知道如何继续。

[1] "2021"  "April"

【问题讨论】:

标签: r string date


【解决方案1】:

使用 Lubridate,我们可以根据路径中日期的月份和年份在月份的第一天形成日期。然后,我们可以加一个月减去一天,得到实际月份的最后一天。

require(lubridate)

path <- "C:/My files/Summer/2021 Holiday/2021/April"
sub_path <- sub(".*/(?=.*/)", "", path, perl=TRUE)
parts <- strsplit(sub_path, "/")[[1]]
d <- ymd(as.Date(paste0("01", parts[2], parts[1]), "%d%B%Y")) %m+% months(1) - days(1)
d

[1] "2021-04-30"

【讨论】:

    【解决方案2】:

    您可以借助basenamedirname 函数来提取月份和年份。我们可以使用as.yearmon 来获得所需的输出。

    library(zoo)
    
    path<-"C:/My files/Summer/2021 Holiday/2021/April"
    
    paste(basename(path), basename(dirname(path))) |>
      as.yearmon() |>
      as.Date(frac = 1)
    
    #[1] "2021-04-30"
    

    【讨论】:

      【解决方案3】:

      试试看

      lubridate::ceiling_date(lubridate::dmy('30.04.2021'),'month')-1
      > [1] "2021-04-30"
      lubridate::ceiling_date(lubridate::dmy('21.05.2021'),'month')-1
      > [1] "2021-05-31"
      

      【讨论】:

      • 谢谢,但这不是我的目标。我的目标是直接从路径中提取年份和月份,避免手动插入。
      【解决方案4】:

      这是我使用 lubridate 的方法:

      library(lubridate)
      
      c("2021", "April") |>
        paste(collapse = " ") |>
        ym() |>
        ceiling_date("month") |>
        rollback() |>
        format("%d.%m.%Y")
      

      返回:

      [1] "30.04.2021"
      

      【讨论】:

      • 我同意,但是提取问题已经在问题中解决了……我只是在这里补充一下。
      【解决方案5】:

      另一种方法是以下方法:

      as.Date(paste0(tail(strsplit(path, '/')[[1]], 2), collapse = '-01-'), format = '%Y-%d-%b') -> x
      x + as.integer(lubridate::days_in_month(x)) - 1 #first day of the month + number of days in a month - 1 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-20
        • 2010-10-01
        • 2012-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多