使用R的字符串操作

时间:2014-04-27 21:26:19

标签: regex r

我正在使用字符串向量。向量中的每个元素都采用“MMYYPub”格式。我想在字符串中切换“MM”和“YY”的位置,从“MMYYPub”到“YYMMPub”。这在R中是否可行 示例:

 vec(1)
'0100pub'
 vec(2)
'0200pub'

前两位数字是月份,以下数字是年份。从1994年到2013年共有10年的数据。

4 个答案:

答案 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)

如果你只想交换周围的字符,你可能不需要正则表达式。在这种情况下,substringpaste也可以正常工作:

> f <- function(x) paste0(substring(x,3,4), substring(x,1,2), substring(x,5))
> x
[1] "0103pub" "0204pub"
> f(x)
[1] "0301pub" "0402pub"