我正在使用字符串向量。向量中的每个元素都采用“MMYYPub”格式。我想在字符串中切换“MM”和“YY”的位置,从“MMYYPub”到“YYMMPub”。这在R中是否可行 示例:
vec(1)
'0100pub'
vec(2)
'0200pub'
前两位数字是月份,以下数字是年份。从1994年到2013年共有10年的数据。
答案 0 :(得分:5)
了解用于表示月度数据的yearmon
类可能也很有用。然后,yearmon
对象可以选择format
打印。
library(zoo)
ym <- as.yearmon("0414pub", format = "%m%ypub")
ym
# [1] "apr 2014"
format(ym, "%y%mpub")
# [1] "1404pub"
答案 1 :(得分:4)
您需要阅读正则表达式。这是一种方式:
R> val <- "0405pub"
R> gsub("(\\d\\d)(\\d\\d)(.*)", "\\2\\1\\3", val)
[1] "0504pub"
R>
我们使用
这一事实\d
表示一个数字(但需要逃避反斜杠)(...)
分组参数,所以这里我们匹配一个(两个数字),两个(也是两个数字)和三个(余数)还有其他方法可以实现,这将根据您描述的模式完成。
编辑:以下是使用\\d{2}
请求两位数的较短变体:
R> gsub("(\\d{2})(\\d{2})", "\\2\\1", val)
[1] "0504pub"
R>
答案 2 :(得分:4)
一种方法是使用(gsub
)替换向量中的所有实例。
> vec <- c('0100pub', '0200pub')
> gsub('([0-9]{2})([0-9]{2})', '\\2\\1', vec)
[1] "0001pub" "0002pub"
答案 3 :(得分:1)
如果你只想交换周围的字符,你可能不需要正则表达式。在这种情况下,substring
和paste
也可以正常工作:
> f <- function(x) paste0(substring(x,3,4), substring(x,1,2), substring(x,5))
> x
[1] "0103pub" "0204pub"
> f(x)
[1] "0301pub" "0402pub"