2015-07-27 3 views
5

У меня есть список файлов txt, хранящихся в A.path, что я хотел бы использовать grep, чтобы найти год, связанный с этим файлом, и сохранить этот год в векторе. Однако, поскольку некоторые из этих файлов txt имеют несколько лет в тексте, я хотел бы только сохранить первый год. Как я могу это сделать?Grep переменная и сохранить результат в векторе в R

Я делал подобные вещи, используя lapply, и это, как я начал подхода к этой проблеме:

lapply(A.path, function(i){ 
j <- paste0(scan(i, what = character(), comment.char='', quote=NULL), collapse = " ") 
year <- vector() 
year[i] <- grep('[0-9][0-9][0-9][0-9]', j) 
}) 

grep вероятно не является правильной функции использовать, так как это возвращает полноту j для каждого i. Какую функцию можно использовать здесь?

+0

вы можете захотеть 'GSUB ("^([0-9] {4}). * "," \\ 1 ", j)', но трудно сказать без текста текста, который вы смотрите на – jenesaisquoi

+0

Вот пример текста: [link] (http : //pastebin.com/uTpnvqzB) @nongkrong – mlinegar

+0

ok, try 'gsub (". *? ([0-9] {4}). * "," \\ 1 ", txt)' – jenesaisquoi

ответ

5

Преобразование комментарий ответить, вы можете использовать gsub с \\1 извлечь значение первого матча (то есть. Текст соответствует между () в регулярном выражении)

gsub(".*?([0-9]{4}).*", "\\1", j) 
+1

Также 'regmatches' ('regmatches (x, regexpr (" [0-9] {4} ", x))') или 'stringr :: str_extract' или' stringi :: stri_extract' с аналогичной логикой. – thelatemail

+0

@thelatemail есть ли какие-либо особые преимущества для любого из этих методов? – mlinegar

+0

@mlinegar 'stri_extract (str = j, regex =" [0-9] {4} ")', вероятно, будет самым быстрым на сегодняшний день (или 'str_extract', я не уверен) – jenesaisquoi

 Смежные вопросы

  • Нет связанных вопросов^_^