r - 使用关键字在目录中找到正确的文件并在R中进行比较
问题描述
我对 r 很陌生,我对正则表达式没有经验,任何帮助都将不胜感激。
我正在阅读 adir
并尝试查找编号为“22953”的文件,然后我想阅读包含此文件的最新文件。日期也写在文件名中。
目录中的文件:
inv_22953_20190828023258_112140.csv
inv_22953_20190721171018_464152.csv
inv_8979_20190828024558_112140.csv
我在这里遇到的问题是,我不能真正依赖字符串的位置来获取日期,因为如您所见,某些文件的字符可能较少,这就是为什么解决方案可能是找到第二个日期之间的日期第三。
filepath <- "T:/Pricing/Workstreams/Business Management/EU/01_Operations/02_Carveouts/05_ImplementationTest/"
list.files(filepath)[which.max(suppressWarnings(ymd_hm(substr(list.files(filepath, pattern="_22953"),11,22))))]```
解决方案
library(lubridate)
# First find the files with 22953 inside
myFiles <- grep("22953", list.files(filepath), value = T)
# Then, isolate the date and which file has the newest (maximum) date:
regex <- "^.*_.*_([0-9]{4})([0-9]{2})([0-9]{2}).*\\.csv$"
myFiles[which(as_date(sub(regex, "\\1-\\2-\\3", myFiles)) == max(as_date(sub(regex, "\\1-\\2-\\3", myFiles))))]
正则表达式的解释
- ^ 匹配字符串的开头(表示“接下来的就是开头”)
- .* 匹配任何 0+ 次
- _ 匹配下划线
- [0-9]{4} 找到 0 到 9 之间的 4 个数字
- [0-9]{2} 找到 0 到 9 之间的 2 个数字
- 为替换字符串捕获括号之间的内容
- \\1 表示括号中的第一组,\\2 表示第二组,\\3 表示第三组
- $ 指的是字符串的结尾(说“字符串的结尾以 .csv 结尾”)
推荐阅读
- tensorflow - CoreML 模型规范 - 将输出类型更改为字典
- php - 如果 id 是变量,file_get_contents 从数据库中删除值
- python - 我可以在解释器解析代码之前断言 python 版本吗?
- flutter - 在颤动中操纵视频速度
- java - 无法在 Eclipse IDE for Java 上运行我的代码
- c++ - 有没有办法迭代这个所以我不必添加每个函数?
- r - 如何反转R中的列表?
- android - 如何在 android studio 中使用 google sceneform 插件?
- ruby-on-rails - 如何使用 simple_form 仅显示其父产品的 product_variants?
- javascript - 使用 QuerySnapshot 增加 FieldValue