2012-03-28 14 views
2

Sagen wir, ich Strings wie dieses:Verschieben von Text innerhalb einer Zeichenkette an das Ende

PH&N 2015 LifeTime Series D 
PH&N 2020 LifeTime Series D 
PH&N 2025 LifeTime Series D 
PH&N 2030 LifeTime Series D 
PH&N 2035 LifeTime Series D 
PH&N 2040 LifeTime Series D 
PH&N 2045 LifeTime Series D 

Wie würde ich die Zahlen am Ende wie diese bewegen, R mit:

PH&N LifeTime Series D 2015 
PH&N LifeTime Series D 2020 
PH&N LifeTime Series D 2025 
... and so on 

Eine Lösung Verwenden von gsub() wäre vorzuziehen.

+2

Es verwendet nicht 'gsub', also wird ich nur dies als Kommentar hinterlassen, aber Sie auf weißen Platz geteilt konnten, und dann' lapply' neu zu ordnen und Kleben Sie die Stücke wieder zusammen. – joran

Antwort

4
gsub("([[:alpha:]]+\\s)([[:digit:]]+)\\s(.+)", "\\1\\3 \\2", dat2$V1) 

[1] "PH & N LifeTime Serie D2015" "PH & N LifeTime Serie D2020" "PH & N LifeTime Serie D2025" "PH & N Lifetime-Serie D2030 " "PH & N Lifetime-Serie D2035" "PH & N Lifetime-Serie D2040" [7] "PH & N Lifetime-Serie D2045"

ich sehe, dass Justin gefragt, warum seine gearbeitete und die gleichen Q gilt für meine Lösung. Dies scheint mehr korrekt zu sein:

gsub("([[:alpha:][:punct:]]+\\s)([[:digit:]]+)\\s(.+)", "\\1\\3 \\2", dat2$V1) 
+0

Dies hat kein Leerzeichen zwischen "D" und dem numerischen Teil wie das angeforderte OP. (Es hat auch einen extra Platz am Ende) – GSee

+0

Das ist nicht schwer zu reparieren. Verschieben Sie das \\ s aus dem mittleren Ziel und fügen Sie ein Leerzeichen in der Ersatzzeichenfolge hinzu. –

2

dat < - read.tines ('cliboard', sep = '')

gsub('([A-z]+) +([0-9]+) +(.+)$', '\\1 \\3 \\2', dat$V1) 

nicht sicher, warum die erste Gruppe der & obwohl fängt ...

+0

Ja, warum funktionieren unsere Antworten? –

+0

@DWin interessant ... Ihre explizite Version ist wahrscheinlich die "richtige". – Justin

+0

Ich fand heraus, dass, weil keiner von uns "^" verwendete, dass unsere beiden Muster mit "N \\ s" übereinstimmten und nicht mit "PH & N \\ s" übereinstimmten. –

2
text <- c("PH&N 2015 LifeTime Series D", 
"PH&N 2020 LifeTime Series D", 
"PH&N 2025 LifeTime Series D", 
"PH&N 2030 LifeTime Series D", 
"PH&N 2035 LifeTime Series D", 
"PH&N 2040 LifeTime Series D", 
"PH&N 2045 LifeTime Series D") 

> ans <- paste(gsub("[0-9]", "", text), as.numeric(gsub("\\D", "", text))) 
> gsub(" ", " ", ans) # replace the double space with a single space 
[1] "PH&N LifeTime Series D 2015" "PH&N LifeTime Series D 2020" 
[3] "PH&N LifeTime Series D 2025" "PH&N LifeTime Series D 2030" 
[5] "PH&N LifeTime Series D 2035" "PH&N LifeTime Series D 2040" 
[7] "PH&N LifeTime Series D 2045" 
+0

+1 für Sneaky –

+0

@BrandonBertelsen, 3 Gubs müssen besser sein als 1, oder? ;-) – GSee

Verwandte Themen