2016-06-15 25 views
5

ho scoperto che le posizioni di "oo" nella seguente frase:Estrazione una stringa in base alla posizione del trovato personaggio 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) 

ho ottenuto il risultato come

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

Sulla base del risultato, voglio estrarre 10 caratteri da ciascuna posizione (5 prima della posizione e 5 dopo la posizione)

Per un esempio, Dovrei ottenere risultato per la prima posizione come "s una buona bo" E voglio questa estrazione per ogni posizione. Dato che sono nuovo di R non riesco a capire molto come fare. Per favore aiutatemi con questo.

Cosa devo fare se devo estrarre le parole di simile è la seguente: dovrei ottenere "un buon libro" per la prima istanza di corrispondenza

risposta

8

possiamo usare substring dopo unlist ing l'gregexpr produzione.

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

Grazie mille! Ha funzionato perfettamente bene – Maddy

+0

Heyy akrun per il problema sopra menzionato se voglio estrarre le due parole prima e dopo la parola che contiene la frase cosa dovrei fare? Per un esempio dovrei ottenere "un buon libro" per la prima istanza di corrispondenza. – Maddy

+0

@ Maddy Non è chiaro. La prima corrispondenza sarebbe per sempre con "" oo "'. È meglio postare come una nuova domanda. – akrun

4

Se non ti dispiace utilizzando stringr pacchetto

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

Si potrebbe anche fare

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

grazie mille tutti per le vostre risposte rapide – Maddy

+0

Heyy lukeA per il problema di cui sopra, se voglio estrarre le due parole prima e dopo la parola che contiene la frase cosa dovrei fare? Per un esempio dovrei ottenere "un buon libro" per la prima istanza di corrispondenza. – Maddy

+0

Dovresti pubblicare una nuova domanda. – lukeA

4
pos = gregexpr("oo", sentence) 

Regolare le posizioni e lunghezze:

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" 
Problemi correlati