Suche…


Einführung

sub und gsub werden verwendet, um Strings anhand von Mustern zu bearbeiten. Weitere Informationen zu verwandten Funktionen und zu regulären Ausdrücken finden Sie unter Musterübereinstimmung und -austausch .

Zeichnen Sie Zeichenfolgen mithilfe von Erfassungsgruppen neu an

Wenn Sie die Reihenfolge von Zeichenfolgen ändern möchten, können Sie im pattern Klammern verwenden pattern um Teile der Zeichenfolge zusammenzufassen. Diese Gruppen können im replacement mit fortlaufenden Nummern adressiert werden.

Das folgende Beispiel zeigt, wie Sie einen Vektor mit Namen der Form "Nachname, Vorname" in einen Vektor der Form "Vorname Nachname" umordnen können.

library(randomNames) 
set.seed(1)

strings <- randomNames(5)
strings
# [1] "Sigg, Zachary"        "Holt, Jake"           "Ortega, Sandra"       "De La Torre, Nichole"
# [5] "Perkins, Donovon"  

sub("^(.+),\\s(.+)$", "\\2 \\1", strings)
# [1] "Zachary Sigg"        "Jake Holt"           "Sandra Ortega"       "Nichole De La Torre"
# [5] "Donovon Perkins"    

Wenn Sie nur den Nachnamen benötigen, können Sie nur die ersten Klammerpaare ansprechen.

sub("^(.+),\\s(.+)", "\\1", strings)
# [1] "Sigg"        "Holt"        "Ortega"      "De La Torre" "Perkins"  

Beseitigen Sie doppelte aufeinanderfolgende Elemente

Nehmen wir an, wir wollen duplizierte Untersequenzelemente aus einer Zeichenfolge entfernen (es kann mehr als eine sein). Zum Beispiel:

2,14,14,14,19

und konvertiere es in:

2,14,19

Mit gsub können wir es erreichen:

gsub("(\\d+)(,\\1)+","\\1", "2,14,14,14,19")
[1] "2,14,19"

Es funktioniert auch für mehr als eine andere Wiederholung, zum Beispiel:

 > gsub("(\\d+)(,\\1)+", "\\1", "2,14,14,14,19,19,20,21")
[1] "2,14,19,20,21"

Lassen Sie uns den regulären Ausdruck erklären:

  1. (\\d+) : Eine durch () begrenzte Gruppe 1, die eine beliebige Ziffer (mindestens eine) findet. Denken Sie daran, dass Sie hier den doppelten Backslash ( \\ ) verwenden müssen, da ein Backslash für eine Zeichenvariable ein spezielles Escape-Zeichen für literale Zeichenfolgenbegrenzer ( \" oder \' ) darstellt. \d\ entspricht: [0-9] .
  2. , : Ein Satzzeichen: , (wir können Leerzeichen oder andere Trennzeichen enthalten)
  3. \\1 : Eine mit der Gruppe 1 identische Zeichenfolge, dh die wiederholte Nummer. Wenn dies nicht der Fall ist, stimmt das Muster nicht überein.

Versuchen wir eine ähnliche Situation: Beseitigen Sie aufeinander folgende wiederholte Wörter:

one,two,two,three,four,four,five,six

Dann ersetzen Sie einfach \d durch \w , wobei \w beliebigen Wortzeichen entspricht, einschließlich Buchstaben, Ziffern oder Unterstrichen. Es ist äquivalent zu [a-zA-Z0-9_] :

> gsub("(\\w+)(,\\1)+", "\\1", "one,two,two,three,four,four,five,six")
[1] "one,two,three,four,five,six"
> 

Das obige Muster enthält dann als einen Fall doppelte Ziffern.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow