Zoeken…


Invoering

sub en gsub worden gebruikt om tekenreeksen met patronen te bewerken. Zie Patroonovereenkomst en vervanging voor meer informatie over gerelateerde functies en reguliere expressies voor het maken van een patroon.

Herschik tekenreeksen met vastleggroepen

Als u de volgorde van tekenreeksen wilt wijzigen, kunt u haakjes in het pattern om delen van de tekenreeks samen te groeperen. Deze groepen kunnen in het replacement argument worden geadresseerd met behulp van opeenvolgende getallen.

In het volgende voorbeeld wordt getoond hoe u een vector van namen van de vorm "achternaam, voornaam" opnieuw kunt rangschikken in een vector van de vorm "achternaam".

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"    

Als u alleen de achternaam nodig heeft, kunt u gewoon de eerste paar haakjes aanspreken.

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

Verwijder dubbele opeenvolgende elementen

Laten we zeggen dat we een dubbel deel van een reeks willen verwijderen (dit kan meer dan één zijn). Bijvoorbeeld:

2,14,14,14,19

en converteer het naar:

2,14,19

Met gsub kunnen we het bereiken:

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

Het werkt ook voor meer dan één verschillende herhaling, bijvoorbeeld:

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

Laten we de reguliere expressie toelichten:

  1. (\\d+) : een groep 1 gescheiden door () en vindt elk cijfer (minstens één). Vergeet niet dat we hier de dubbele backslash ( \\ ) moeten gebruiken, want voor een tekenvariabele vertegenwoordigt een backslash een speciaal escape-teken voor letterlijke tekenreeksscheidingstekens ( \" of \' ). \d\ is gelijk aan: [0-9] .
  2. , : A punctuatie teken: , (we kunnen spaties of enige andere begrenzer)
  3. \\1 : een identieke tekenreeks als groep 1, dwz: het herhaalde nummer. Als dat niet gebeurt, komt het patroon niet overeen.

Laten we een soortgelijke situatie proberen: elimineer opeenvolgende herhaalde woorden:

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

Vervang vervolgens \d door \w , waarbij \w overeenkomt met elk woordteken, inclusief: elke letter, cijfer of onderstrepingsteken. Het is gelijk aan [a-zA-Z0-9_] :

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

Vervolgens bevat het bovenstaande patroon als een geval met dubbele cijfers een geval met dubbele cijfers.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow