按日期字符串筛选文件列表

时间:2018-06-04 13:00:16

标签: r dplyr stringr

我有一个文件列表:

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中的日期预先过滤列表? <{1}}是

的结果
file_list

1 个答案:

答案 0 :(得分:2)

这里的问题是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)))]