R Language
Ändra strängar genom substitution
Sök…
Introduktion
sub
och gsub
används för att redigera strängar med mönster. Se Mönstermatchning och ersättning för mer information om relaterade funktioner och vanliga uttryck för hur man bygger ett mönster.
Ordna karaktärssträngar med hjälp av fångstgrupper
Om du vill ändra ordningen på en teckensträng kan du använda parenteser i pattern
att gruppera delar av strängen. Dessa grupper kan i replacement
läggas till med hjälp av på varandra följande nummer.
Följande exempel visar hur du kan omordna en vektor med namn i formen "efternamn, förnamn" till en vektor med formen "förnamn efternamn".
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"
Om du bara behöver efternamnet kan du bara adressera de första parparenteserna.
sub("^(.+),\\s(.+)", "\\1", strings)
# [1] "Sigg" "Holt" "Ortega" "De La Torre" "Perkins"
Eliminera duplicerade element i följd
Låt oss säga att vi vill eliminera duplicerat efterföljande element från en sträng (det kan vara mer än ett). Till exempel:
2,14,14,14,19
och konvertera det till:
2,14,19
Med gsub
kan vi uppnå det:
gsub("(\\d+)(,\\1)+","\\1", "2,14,14,14,19")
[1] "2,14,19"
Det fungerar också för mer än en annan upprepning, till exempel:
> gsub("(\\d+)(,\\1)+", "\\1", "2,14,14,14,19,19,20,21")
[1] "2,14,19,20,21"
Låt oss förklara det reguljära uttrycket:
-
(\\d+)
: En grupp 1 avgränsad av () och hittar valfri siffra (minst en). Kom ihåg att vi måste använda det dubbla backslashet (\\
) här för en teckenvariabel representerar ett backslash speciellt flyktecken för bokstavliga strängavgränsare (\"
eller\'
).\d\
motsvarar:[0-9]
. -
,
: Ett skiljetecken Tecken:,
(vi kan inkludera utrymmen eller någon annan avgränsare) -
\\1
: En identisk sträng till gruppen 1, dvs: det upprepade antalet. Om det inte händer matchar mönstret inte.
Låt oss försöka en liknande situation: eliminera i följd upprepade ord:
one,two,two,three,four,four,five,six
Sedan ersätter du bara \d
med \w
, där \w
matchar alla ordtecken, inklusive: valfri bokstav, siffra eller understreck. Det motsvarar [a-zA-Z0-9_]
:
> gsub("(\\w+)(,\\1)+", "\\1", "one,two,two,three,four,four,five,six")
[1] "one,two,three,four,five,six"
>
Sedan inkluderar ovanstående mönster som ett visst fall duplicerade siffrorfall.