2012-03-28 63 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