r - 按日期字符串过滤文件列表
问题描述
我有一个文件列表:
file_list <- c("C:\\Users\\uname\\files/DailyOpenOrders_NET_20160922.csv",
"C:\\Users\\uname\\files/DailyOpenOrders_NET_20160923.csv",
"C:\\Users\\uname\\files/DailyOpenOrders_NET_20160927.csv",
"C:\\Users\\uname\\files/DailyOpenOrders_NET_20160928.csv",
"C:\\Users\\uname\\files/DailyOpenOrders_NET_20160929.csv",
"C:\\Users\\uname\\files/DailyOpenOrders_NET_20160930.csv"
)
以及这些文件名日期的解析列表,仅针对星期一的日期进行过滤:
file_dates_mon <- structure(list(file_dates = c("20161003", "20161010", "20161017", "20161024", "20161031", "20161107"), weekday = c("Monday", "Monday",
"Monday", "Monday", "Monday", "Monday")), .Names = c("file_dates",
"weekday"), row.names = c(NA, 6L), class = "data.frame")
我尝试使用str_detect(file_list,file_dates_mon$file_dates)
尝试将文件列表过滤到仅限星期一的日期。目的是预先过滤文件列表,而不是合并 361 文件然后按日期过滤。
有没有办法根据日期预先过滤列表file_dates_mon
? file_list
是结果
dir<- choose.dir()
file_list<-list.files(dir,full.names = TRUE,pattern="DailyOpenOrders_NET_*")
解决方案
这里的问题是str_detect
通过模式或字符串进行矢量化。不是同时两个。
一些模式:
filter_mon <- c("20160929", "20160927")
现在检查str_detect
:
library(stringr)
str_detect(file_list, filter_mon)
#output
[1] FALSE FALSE FALSE FALSE TRUE FALSE
只有第一个模式在所有字符串中都匹配。一个TRUE
被退回。
解决这个问题的一种方法是str_detect
为每个file_dates_mon$file_dates
(或在本例中filter_mon
)运行,然后Reduce
是逻辑向量:
file_list[Reduce("|", lapply(filter_mon, function(x) str_detect(file_list, x)))]
#output
[1] "C:\\Users\\uname\\files/DailyOpenOrders_NET_20160927.csv" "C:\\Users\\uname\\files/DailyOpenOrders_NET_20160929.csv"
grepl
也是一种选择
file_list[Reduce("|", lapply(filter_mon, function(x) grepl(x, file_list)))]
推荐阅读
- ruby - 进行捆绑安装时出现 puma gem 和 ssl 错误
- javascript - .push commant 从 jquery 函数执行“Underfind”,如何执行一个数字?
- java - 二叉搜索树递归不起作用
- python - 我可以在张量流的损失函数中将梯度转换为标量吗?
- python - 尽管使用熊猫大写或小写,如何查找单词?
- javascript - 当应该只返回 1 时,映射返回相同对象的 2 倍
- linux - 如何在 Ubuntu AWS 实例中禁用 IPV4 并仅使用 IPV6
- typescript - 为什么布尔值不像布尔值?
- osgi - gogo shell 不能工作 apache felix 6.0.3?
- javascript - 将函数传递给函数和不同长度的参数