2016-06-10 6 views
0

Ich möchte alle Elemente in 'a', bei 'B' und bei 3 Werten vor dem Ende der Zeichenfolge aufteilen. Die Ausgabe sollte ein ähnliches Objekt (Zeichen) sein wie 'a' mit den kürzeren Elementen.geteilte Elemente Zeichenfolge in R nach Muster und Länge vor Ende

a <- c("A122.B551.ytzuZZZ", "A78.B619.triXXX") 

#"B551.ytzu" "B619.tri" 
+0

Was ist die gewünschte Ausgabe? Es ist nicht klar aus Ihrer Frage. – lmo

Antwort

2

scheint für Ihre bestimmten Fällen zu funktionieren:

gsub("^.*(B.*).{3}$", "\\1", a) 
# [1] "B551.ytzu" "B619.tri" 

wo ^ den Anfang der Zeichenfolge entspricht, .* Spiel eine beliebige Anzahl von Zeichen. (B.*) wird ein Muster beginnend von B bis drei Zeichen vor dem Ende der Zeichenfolge mit .{3}$ übereinstimmen. \\1 ersetzen Sie die Zeichenfolge durch das Muster (B.*).

1

Es gibt Bibliotheken, die dem Bearbeiten von Strings und vielen Funktionen in der Basis gewidmet sind. Funktionen zum Starten mit substr(), gsub(), strsplit(). Dann gehen Sie weiter zu grep(), regexpr(), regexec(). Und schließlich betrachten Sie das Paket stringr.

Von diesen ist häufig gsub() ausreichend.

a <- c("A122.B551.ytzuZZZ", "A78.B619.triXXX") 

# Remove everything up to B with just B. (see '?grep' for what "^.*" means). 

a2<-gsub("^.*B","B",a) 

# Remove the last three characters (see '?grep' for what ".{3}$" means). 

a3<-gsub(".{3}$","",a2) 
Verwandte Themen