首页 > 解决方案 > 仅从文件列表中提取第一个和最后一个日期,包括 R 中其名称中的日期

问题描述

我有一个加载到 R 中的 excel 文件列表,然后将它们绑定在一起。

这是我用来加载文件的代码

setwd("T:/file/path")
file.list <- list.files(pattern='*.xlsx')
list <- lapply(file.list, read_excel)
df <- rbindlist( list )

然后我运行下面的代码以在特定条件下对文件进行子集化,并将其写入新的 csv 文件。

events <- df %>%
  filter(intent == 2 | str_detect(text_info, 'SI'))

write_csv(events, "Notifications year_month_day_year_month_day.csv")

我加载的每个文件都称为“通知 year_month_day-year_month_day.xlsx”

我想做的是从文件名中提取日期,找到最早和最晚的日期,然后将此信息附加到我输出的 csv 文件的名称中。这样我就不必手动输入新文件名的最早和最晚日期。

在我正在使用的真实数据中,file.list如下所示:

file.list
[1] "Notifications 20200104-20200110.xlsx"                
[2] "Notifications 20200111-20200117.xlsx"                
[3] "Notifications 20200118-20200124.xlsx"                
[4] "Notifications 20200125-20200131.xlsx"                
[5] "Notifications 20200201-20200207.xlsx"                
[6] "Notifications 20200208-20200214.xlsx"                

我正在寻找可以a)从文件名中提取日期b)按顺序对它们进行排序c)取最早和最晚日期的代码

这个的输出将是20200208_20200110

然后我想将这些日期附加到此代码中指定的文件名

write_csv(events, "Notifications year_month_day_year_month_day.csv")

标签: rexcelreadrreadxl

解决方案


您可以使用以下内容:

paste(
    rev(format(range(
                as.Date(unlist(stringr::str_extract_all(file.list, '\\d+')),
             '%Y%m%d')), 
        '%Y%m%d')), 
   collapse = "_")

#[1] "20200214_20200104"

str_extract_all从 中提取所有数字file.list,我们unlist将它们作为向量获取,将它们转换为日期,用于range获取最小和最大日期,用于format获取所需格式的数据,将它们反转并粘贴在一起。


推荐阅读