2015-07-27 24 views
5

Ho una lista di file txt memorizzati in A.path che vorrei usare grep per trovare l'anno associato a quel file e salvare quest'anno in un vettore. Tuttavia, poiché alcuni di questi file txt hanno più anni nel loro testo, mi piacerebbe solo memorizzare il primo anni. Come posso fare questo?Grep una variabile e memorizzare il risultato in un vettore in R

Ho fatto cose simili utilizzando lapply, e questo è il modo ho cominciato affrontare questo problema:

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 probabilmente non è la funzione diritto di utilizzare, in quanto questo restituisce la totalità di j per ogni i. Qual è la funzione giusta da usare qui?

+0

si potrebbe desiderare 'gsub ("^([0-9] {4}). * "," \\ 1 ", j)' ma è difficile dire senza esempio del testo che stai guardando – jenesaisquoi

+0

Ecco un esempio del testo: [link] (http : //pastebin.com/uTpnvqzB) @nongkrong – mlinegar

+0

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

risposta

5

Conversione commento di rispondere, è possibile utilizzare gsub con \\1 per estrarre il valore della prima partita (es. Il testo corrispondente tra () nel regex)

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

Anche 'regmatches' ('regmatches (x, regexpr (" [0-9] {4} ", x))') o 'stringr :: str_extract' o' stringi :: stri_extract' con logica simile. – thelatemail

+0

@thelatemail ci sono vantaggi particolari per uno di questi metodi? – mlinegar

+0

@mlinegar 'stri_extract (str = j, regex =" [0-9] {4} ")' probabilmente è il più veloce di gran lunga (o 'str_extract', non sono sicuro) – jenesaisquoi

Problemi correlati