2017-01-05 2 views
0

Предполагая, что у меня есть два каталога с некоторыми файлами в течение одного года (2010/01/01-2010/12/31). Файлы называются так: dirct1:Список файлов с определенными датами?

fs_df_20100101F00_20100101F88_777_0009.dat 
fs_df_20100102F00_20100102F88_777_0009.dat 
etc.............(only the date change) 

dirct2:

gf_gh_20100101F00_20100101F88_788_08.dat 
gf_gh_20100102F00_20100102F88_788_08.dat 
etc.............(only the date change) 

Это будет список всех файлов в dir1 и dir2 для всех дат. однако некоторые файлы (даты) отсутствуют в каталоге dir1. Но мне нужно перечислить только файлы в каталоге dir2, которые имеют одну и ту же дату с dir1. (если дата отсутствует в каталоге dir1, не перечислите ее в dir2) .......

+1

'intersect (dir1, dir2)'? –

+0

Хорошая точка! @csgillespie В этом случае может также выполняться: 'lapply (intersect (substr (dir1, 7,14), (dir2, 7,14)), do-something)' –

ответ

1

Сначала вам нужно извлечь даты из названий файлов. Поскольку у вас есть последовательная система именования, вы можете избежать регулярных выражений и использовать substr

dir1 = c("fs_df_20100101F00_20100101F88_777_0009.dat", "fs_df_20100102F00_20100102F88_777_0009.dat") 
dir2 = c("gf_gh_20100101F00_20100101F88_788_08.dat", "gf_gh_20100102F00_20100102F88_788_08.dat") 

substr(dir1, 7, 14) 
#[1] "20100101" "20100102" 

Затем определить, какие даты в dir1 в dir2 использование which и оператор %in%

matching = which(substr(dir1, 7, 14) %in% substr(dir2, 7, 14)) 

Тогда просто использовать

dir1[matching] 
Смежные вопросы