Загрузка всего набора данных с FTP и использование определенных файлов с регулярным выражением для обработки данных в R - PullRequest
0 голосов
/ 17 января 2019

У меня есть следующий общедоступный набор данных на FTP. Я хочу загрузить из нее всю папку HistoricalOffers. После загрузки всей папки я хочу использовать только файлы в каждой папке, которая начинается с формата «DA-ENERGY-OFFERS- <12 цифр> .csv». Ниже приведен код, который я использовал, но не смог получить желаемый результат.

library(curl)
library(tidyverse)
library(data.table)
library(zoo)
link = "ftp://pubftp.spp.org/Markets/HistoricalOffers/"
handle = new_handle(dirlistonly=TRUE)
conn = curl(link, "r", handle)
tbl = read.table(v, stringsAsFactors = TRUE, fill=TRUE)
close(v)
tbl

Это отображение файлов в R, но я хочу загрузить всю папку «HistorialOffers» для будущего использования, а затем извлечь файлы с именами в указанном выше формате. Я взял ссылку на этот вопрос здесь .

Я знаю, что для получения файлов с именами, имеющими определенный формат, мне нужно использовать регулярное выражение, для которого я безуспешно пытался -

filenames = list.files(path="ftp://pubftp.spp.org/Markets/HistoricalOffers/2014", pattern="^[DA-OR-OFFERS-]/d.csv", recursive = TRUE, full.names = TRUE)
content.list <- lapply( filenames, function(x) fread( x, sep = "\n", header = FALSE )[grepl( pattern, V1 )] )

Я получаю эту ошибку при запуске приведенного выше кода для применения регулярных выражений -

Error in list.files(path = "ftp://pubftp.spp.org/Markets/HistoricalOffers/2014",  : invalid 'pattern' regular expression

Я также попытался обратиться к некоторым чит-листам в Интернете, но не смог понять, как будет выглядеть правильный шаблон. Любая помощь по этому вопросу будет принята с благодарностью. Заранее спасибо!

Ссылка на набор данных - данные

Дополнительная информация - некоторые примеры имен файлов => DA-ENERGY-OFFERS-201403010100.csv, DA-ENERGY-OFFERS-201403020100.csv, DA-ENERGY-OFFERS-201403030100.csv

1 Ответ

0 голосов
/ 17 января 2019

Вы можете попробовать это:

DA-ENERGY-OFFERS-\d+.csv

Примерно так:

list.files(path="ftp://pubftp.spp.org/Markets/HistoricalOffers/2014", pattern="DA-ENERGY-OFFERS-\d+.csv", recursive = TRUE, full.names = TRUE)

Как показано здесь: https://regex101.com/r/cYM9lT/2

Что касается какой ошибкиваш код имел, вы неправильно использовали классы символов.[...] соответствует одному из символов в [], а не всей строке.Пример: [abcd] будет соответствовать каждому отдельному символу в нем, то есть 'a', 'b', 'c' и 'd'

Использование его с - подразумевает любой символ в этом диапазоне
Пример: [a-h] будет соответствовать каждому отдельному символу в диапазоне от 'a' до 'h' (включительно).В вашем коде, когда регулярное выражение встречает R-O в классе символов, оно сбивается с толку, потому что нет правильного ответа для R-O.Отсюда и ошибка в паттерне.

...