Фильтровать список файлов по дате - PullRequest
0 голосов
/ 04 июня 2018

У меня есть список файлов:

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_*")

1 Ответ

0 голосов
/ 04 июня 2018

Проблема здесь в том, что 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)))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...