2012-03-28 27 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 2012-03-28 21:09:21

回答

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

[1]「PH & N LifeTime Series D2015」「PH & N LifeTime Series D2020」「PH & N LifeTime Series D2025」「PH &ñ生命期系列D2030「,‘PH &ñ生命期系列D2035’,‘PH &ñ生命期系列D2040’ [7]‘PH &ñ生命期系列D2045’

我看到賈斯汀問爲什麼他的工作和相同的Q適用於我的解決方案。這似乎是更正確的:

+0

這在「D」和數字部分之間沒有空格,就像請求的OP一樣。 (最後還有一個額外的空間) – GSee 2012-03-28 21:48:49

+0

這並不難解決。 Jus將\\ s移出中間目標並在替換字符串中添加一個空格。 – 2012-03-28 22:20:49

2

DAT < - read.tines( 'cliboard',九月= '')

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

不知道爲什麼第一組捕獲&雖然...

+0

是的,爲什麼我們的答案都工作? – 2012-03-28 21:28:54

+0

@DWin有趣......你更明確的版本可能是「正確的」。 – Justin 2012-03-28 21:38:35

+0

我發現,因爲我們都沒有使用「^」這兩個模式匹配「N \ s」而不是匹配「PH&N \ s」。 – 2012-03-29 16:14:47

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因偷偷摸摸 – 2012-03-29 03:28:16

+0

@BrandonBertelsen,3個gsubs要比1好,對不對? ;-) – GSee 2012-03-29 13:27:55

相關問題