2015-07-27 6 views
5

Ich habe eine Liste der TXT-Dateien in A.path gespeichert, die ich verwenden möchte grep auf das Jahr mit dieser Datei verbunden zu finden, und speichern Sie dieses Jahr in einem Vektor. Da einige dieser txt-Dateien jedoch mehrere Jahre in ihrem Text haben, möchte ich nur das erste Jahr speichern. Wie kann ich das machen?Grep eine Variable und speichern Sie das Ergebnis in einem Vektor in R

Ich habe ähnliche Dinge getan lapply verwendet wird, und das ist, wie ich dieses Problem begann nähern:

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 wahrscheinlich nicht die richtige Funktion zu verwenden, da dies die Gesamtheit des j für jede zurück i. Was ist die richtige Funktion hier zu verwenden?

+0

möchten Sie vielleicht 'gsub ("^([0-9] {4}). * "," \\ 1 ", j)' aber es ist schwer zu sagen, ohne Beispiel für den Text, den Sie betrachten – jenesaisquoi

+0

Hier ist ein Beispiel für den Text: [link] (http : //pastebin.com/uTpnvqzB) @nongkrong – mlinegar

+0

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

Antwort

5

Kommentar Konvertieren zu beantworten, können Sie gsub mit \\1, um den Wert des ersten Spiels zu extrahieren (dh. Der Text zwischen () in der regex abgestimmt)

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

Auch 'regmatches' ('regmatches (x, regexpr (" [0-9] {4} ", x))' oder 'stringr :: str_extract' oder' stringi :: stri_extract' mit ähnlicher Logik. – thelatemail

+0

@thelatemail Gibt es irgendwelche besonderen Vorteile für diese Methoden? – mlinegar

+0

@mlinegar 'stri_extract (str = j, regex =" [0-9] {4} ")' wäre wahrscheinlich bei weitem der schnellste (oder 'str_extract', da bin ich mir nicht sicher) – jenesaisquoi

Verwandte Themen