2016-06-15 9 views
5

fand ich im folgenden Satz die Positionen von „oo“ aus:Extrahieren einer Zeichenfolge basierend auf Position gefunden Charakter in R

sentence <- "It is a good book. Good for first reading. 
This book explains everything in Qdetail with tons of examples and exercises for practice. Good for cracking written tests on campuses and competitive exams. It is cheap so any way one can have a copy along with other books" 

pos = gregexpr("oo", sentence) 

ich das Ergebnis als

bekam
> pos 
[[1]] 
[1] 10 15 21 50 136 263 
attr(,"match.length") 
[1] 2 2 2 2 2 2 
attr(,"useBytes") 
[1] TRUE 

Basierend auf den Ergebnis, ich möchte 10 Zeichen aus jeder Position extrahieren (5 vor der Position und 5 nach der Position)

Für ein Beispiel, Ich sollte Ergebnis für den ersten Speicherort alserhalten"s ein gutes bo" Und ich möchte diese Extraktion für jede Position. Da ich neu bei R bin, konnte ich nicht viel herausfinden. Bitte helfen Sie mir dabei.

Was soll ich tun, wenn ich die Worte zu extrahieren, wie es unten gezeigt wird: ich sollte „ein gutes Buch“ bekommen für die erste Instanz von

passende

Antwort

8

tun wir substring nach unlist die gregexpr ing verwenden können Ausgabe.

v1 <- unlist(gregexpr("oo", sentence)) 
substring(sentence, v1 - 5, v1 +5) 
#[1] "s a good bo" "ood book. G" "ok. Good fo" "his book ex" "ce. Good fo" "her books" 
+1

Vielen Dank! Es funktionierte einwandfrei – Maddy

+0

Heyy für das oben erwähnte Problem akrun, wenn ich die zwei Wörter vor und nach dem Wort extrahieren möchte, das die Phrase enthält, was soll ich tun? Für ein Beispiel sollte ich "ein gutes Buch" für die erste Instanz des Abgleichs bekommen. – Maddy

+0

@Maddy Es ist nicht so klar. Das erste Match wäre für "oo" gut. Es ist besser, als neue Frage zu posten. – akrun

4

Wenn Sie nicht Paket mit stringr nichts dagegen

library(stringr) 
ind<-str_locate_all(sentence,"oo")[[1]][ ,1] 
str_sub(sentence,ind-5,ind+5) 


[1] "s a good bo" "ood book. G" "ok. Good fo" "his book ex" "ce. Good fo" "her books" 
5

Sie könnten auch

mapply(
    substr, 
    x=sentence, 
    start=pos[[1]]-5, 
    stop=pos[[1]]+5, 
    USE.NAMES = F 
) 
# [1] "s a good bo" "ood book. G" "ok. Good fo" 
# [4] "his book ex" "ce. Good fo" "her books" 
+0

Vielen Dank allen für Ihre schnelle Antworten – Maddy

+0

Heyy Lukea für das oben genannte Problem, wenn ich die beiden Wörter vor und nach dem extrahieren möchten Wort, das die Phrase enthält, was soll ich tun? Für ein Beispiel sollte ich "ein gutes Buch" für die erste Instanz des Matching bekommen. – Maddy

+0

Sie sollten eine neue Frage stellen. – lukeA

4
pos = gregexpr("oo", sentence) 

Passen Sie die Positionen und Längen:

pos[[1]] <- pmax(pos[[1]] - 5, 0) 
attr(pos[[1]], "match.length")[] <- 11 
regmatches(sentence, pos) 
#[[1]] 
#[1] "s a good bo" "ood book. G" "ok. Good fo" "his book ex" "ce. Good fo" "her books" 
Verwandte Themen