2016-05-15 5 views
-1

Ich muss eine kleine Übung in R und ich muss wissen, wie oft dieses ein bestimmtes Wort in der Zeichenfolge und wo die Position jedes der Wörter erscheint. dieseSuche Position eines Wortes in String

ich habe:

string = 'a b a b c d a a g' 
splitstring = strsplit(string, ' ') 
sapply(gregexpr("a", splitstring, fixed= TRUE), function(x) sum(x>-1)) 

Meine Ausgabe ist: [1] 4, so habe ich vier 'a' in meinen String und jetzt wollte ich ihre Position kennen.

+1

Was haben Sie versucht und warum hat es nicht funktioniert? Du könntest versuchen 'grepl (" a ", splitstring)' – Heroka

+1

Ich frage mich, ob Sie Ihren Code beim Laufen überprüft haben. 'splitstring = strsplit (string, '')' hat nicht funktioniert JFY. Sie würden das gleiche Ergebnis nur für 'gregexpr (" a ", string, fixed = TRUE) erhalten. Und "sapply" bei vektorisierten Operationen zu betreiben, ist nur eine Verschwendung. Und wenn Sie bereits auf diesem Pfad sind, brauchen Sie nach dem Teilen keine Regex. Sie könnten 'splitstring <- strsplit (string, '', fixed = TRUE) [[1]]; Summe (Splitstring == "a"); was (splitstring == "a") ', um beide Fragen vektorisiert zu beantworten. –

Antwort

2

gregexpr gibt Ihnen die Positionen:

gregexpr("a", string, f=T)[[1]] 
# [1] 1 5 13 15 
0

Eine Lösung wird unter Verwendung der stringr Paket Lokalisierungsfunktion, wie folgt:

library(stringr) 
string = 'a b a b c d a a g' 
l <- str_locate_all(string, 'a') 
l 

Diese einer Ausgabe in Form einer Liste der Matrix (ces) verursacht alle Start und Endpositionen, wie folgt:

[[1]] 
    start end 
[1,]  1 1 
[2,]  5 5 
[3,] 13 13 
[4,] 15 15 

Wenn Sie nur die Startpositionen extrahieren möchten, können Sie wie folgt vor:

l[[1]][, 'start'] 
[1] 1 5 13 15 
Verwandte Themen