r - 仅从文件列表中提取第一个和最后一个日期,包括 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")
解决方案
您可以使用以下内容:
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
获取所需格式的数据,将它们反转并粘贴在一起。
推荐阅读
- php - Laravel 按钮,onclick 功能无需更改 URL
- python - 当我需要填充单元格时,变量(选项卡名称)不起作用
- javascript - 如何以特定格式显示当前日期和时间?
- sql - 为什么“DD/MM/YYYY”在过滤器中不起作用?
- javascript - 错误 [ERR_HTTP_HEADERS_SENT]:在 ServerResponse.setHeader (_http_outgoing.js:518:11) 将标头发送到客户端后无法设置标头
- apache-kafka - Flink - 如何使用 withTimestampAssigner 从事件有效负载中获取时间(不使用 Kafka 时间戳)
- javascript - 从 uri 或 require 对本机图像源做出反应
- elixir - Elixir Simple 模块仅产生“参数错误”
- java - 如何分配一个长的十六进制值,我应该在 Java 中将它分配给什么数据类型?
- javascript - Quill.js 不断从锚标签中剥离类