2015-10-23 9 views
0

У меня есть несколько файлов, похожих на «PRISM_ppt_stable_4kmM2 _ ------ _ bil.bil», где ------ - год и месяц, например 190112. Дата файла варьируется от 189501 до 198012. В R на машине с Windows 7 я хотел бы сопоставить все файлы на время с 192001 по 193912. Я уверен, что хочу grepl(), но я не могу выяснить способ ссылки на последовательность в команде. Я попыталсяgrep для соответствия определенной последовательности чисел в сочетании текста и цифр

my.files[grepl('PRISM.*/1920/.bil$',my.files)] 

и

my.files[grepl('PRISM.*[1][9][2][0].',my.files)] 

и другие вариации, но только получать сообщения об ошибках. Я знаю, что [0-9] {4} будет соответствовать любой последовательности из четырех чисел, но это будет соответствовать всем файлам.

+0

'(189 [5-9] | 1 [9] ([0-7] [0-9] | 80)) (0 [1- 9] | 1 [0-2]) 'попробуйте это регулярное выражение. –

+0

@AruneshSingh благодарит за предложение. Это будет охватывать все файлы/даты. Я искал небольшой набор дат, но я смог использовать ваш ответ, чтобы найти то, что я хотел. 'my.files [grepl ('(192 [0-9] | 193 [0-9]) (0 [1-9] | 1 [0-2])', my.files)]' – shea

+0

Lol, извините Я думал, что вы хотите соответствовать от 1895 до 1980 года, потому что это действительно так. –

ответ

0

Вот что я хотел бы сделать:

# Reproducible example of file list 
library(stringr) 
ym <- paste0(1895:1980, str_pad(1:12, 2, pad='0')) 
file_list <- paste0("PRISM_ppt_stable_4kmM2_", ym, "_bil.bil") 

# Create a list of desired dates and convert to your date format 
dates <- seq(as.Date('1920-01-01'), as.Date('1939-12-01'), by='month') 
dates <- format(dates, '%Y%m') 

# Subset the file list 
your_files <- file_list[str_extract(file_list, '[0-9]{6}') %in% dates] 
+0

Новый пакет для проверки. Мне не приходилось использовать даты. Объекты даты все еще дают мне проблемы. – shea