2012-03-28 2 views
2

Скажем, у меня есть строки, как это:Перемещение текста внутри строки до конца

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 

Как бы переместить номера до конца, как это, используя R:

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

Раствор использование gsub() было бы предпочтительнее.

+2

Он не использует 'gsub', так что я просто оставлю это в качестве комментария, но можно разделить на белом пространстве, а затем' lapply', чтобы изменить порядок и вставьте части обратно вместе. – joran

ответ

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

[1] "PH & N Серия LifeTime D2015" "PH & N Серия LifeTime D2020" "PH & N Серия LifeTime D2025" "PH & N LifeTime серии D2030 " "PH & N LifeTime серии D2035" "PH & N LifeTime серии D2040" [7] "PH & N LifeTime серии D2045"

Я вижу, что Джастин спросил, почему его обработанное и тот же Q относится к моему решению. Это, казалось бы более правильным:

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

Это не имеет пробела между «D» и числовой частью, подобной запрошенной OP. (Также у него есть дополнительное пространство в конце) – GSee

+0

Это не сложно исправить. Jus переместите \\ s из средней цели и добавьте пробел в заменяющую строку. –

2

< DAT - read.tines ('cliboard', Сентябрь = '')

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

не знает, почему первая группа ловит & хотя ...

+0

Да, почему любой из наших ответов работает? –

+0

@DWin интересно ... Ваша более явная версия, вероятно, «правильная». – Justin

+0

Я понял, что, поскольку ни один из нас не использовал «^», что оба наших шаблона соответствовали «N \\ s», а не соответствовали «PH & N \\ s». –

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 за то, что он подлый –

+0

@BrandonBertelsen, 3 gsubs должны быть лучше 1, правильно? ;-) – GSee

Смежные вопросы