Ricerca…


introduzione

sub e gsub sono usati per modificare stringhe usando pattern. Vedi Pattern Matching and Replacement per maggiori informazioni sulle funzioni correlate e sulle espressioni regolari su come costruire un pattern.

Riordina le stringhe di caratteri usando i gruppi di cattura

Se si desidera modificare l'ordine di una stringa di caratteri, è possibile utilizzare le parentesi nel pattern per raggruppare parti della stringa. Questi gruppi possono essere aggiunti nell'argomento replacement utilizzando numeri consecutivi.

L'esempio seguente mostra come riordinare un vettore di nomi del modulo "cognome, nome" in un vettore del modulo "nome cognome".

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"    

Se hai solo bisogno del cognome potresti semplicemente indirizzare le prime coppie di parentesi.

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

Elimina elementi consecutivi duplicati

Diciamo che vogliamo eliminare l'elemento di sottosuccessione duplicato da una stringa (può essere più di uno). Per esempio:

2,14,14,14,19

e convertirlo in:

2,14,19

Usando gsub , possiamo ottenerlo:

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

Funziona anche per più di una ripetizione, ad esempio:

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

Spieghiamo l'espressione regolare:

  1. (\\d+) : un gruppo 1 delimitato da () e trova qualsiasi cifra (almeno una). Ricordare che è necessario utilizzare il doppio backslash ( \\ ) qui perché per una variabile di carattere una barra rovesciata rappresenta un carattere di escape speciale per i delimitatori di stringa letterali ( \" o \' ). \d\ è equivalente a: [0-9] .
  2. , : Un segno di punteggiatura: , (possiamo includere spazi o qualsiasi altro delimitatore)
  3. \\1 : una stringa identica al gruppo 1, vale a dire: il numero ripetuto. Se ciò non accade, allora il modello non corrisponde.

Proviamo una situazione simile: elimina le parole ripetute consecutive:

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

Quindi, sostituisci \d con \w , dove \w corrisponde a qualsiasi carattere di parola, inclusi: qualsiasi lettera, cifra o underscore. È equivalente a [a-zA-Z0-9_] :

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

Quindi, il modello sopra riportato include un caso di cifre duplicate caso particolare.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow