R:找到字符位置后的子串?

时间:2015-05-08 04:13:48

标签: regex r string

我已经看到了一些关于在R中用字符串返回字符位置的问题,但也许我似乎无法弄清楚我的情况。我认为这是因为我试图为整个列而不是单个字符串做这个,但它可能只是我与正则表达式的斗争。

现在,我有一个data.frame,其列df$id看起来像13.23-45-6A。句点之前的位数是可变的,但我想在列的每一行的句点之后保留字符串的一部分。我想做点什么:

df$new <- substring(df$id, 1 + indexOf(".", df$id))

因此,12.23-45-6A将成为23-45-6A0.1B将成为1B4.A-A将成为A-A,依此类推整个列。

现在我有:

df$new <- substr(df$id, 1 + regexpr("\\\.", data.count$id),99)

感谢您的任何建议。

3 个答案:

答案 0 :(得分:3)

正如@AnandaMahto提到他的评论,你可能会更好地简化事情并使用gsub

> x <- c("13.23-45-6A", "0.1B", "4.A-A")
> gsub("[0-9]*\\.(.*)", "\\1", x, perl = T, )
[1] "23-45-6A" "1B" "A-A"

要使用现有数据框架,您可以尝试:

df$id <- gsub("[0-9]*\\.(.*)", "\\1", df$id, perl = T, )

答案 1 :(得分:2)

另一种方法是使用strsplit。使用@Tims示例

    x <- c("13.23-45-6A", "0.1B", "4.A-A")
    sapply(strsplit(x, "\\."), "[", -1)

    "23-45-6A" "1B" "A-A"     

答案 2 :(得分:0)

您可以使用

删除包含.的字符
 sub('[^.]*\\.', '', x)
 #[1] "23-45-6A" "1B"       "A-A"     

数据

 x <- c("13.23-45-6A", "0.1B", "4.A-A")