我有一个文件列表:
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
答案 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)))]