我已经看到了一些关于在R中用字符串返回字符位置的问题,但也许我似乎无法弄清楚我的情况。我认为这是因为我试图为整个列而不是单个字符串做这个,但它可能只是我与正则表达式的斗争。
现在,我有一个data.frame
,其列df$id
看起来像13.23-45-6A
。句点之前的位数是可变的,但我想在列的每一行的句点之后保留字符串的一部分。我想做点什么:
df$new <- substring(df$id, 1 + indexOf(".", df$id))
因此,12.23-45-6A
将成为23-45-6A
,0.1B
将成为1B
,4.A-A
将成为A-A
,依此类推整个列。
现在我有:
df$new <- substr(df$id, 1 + regexpr("\\\.", data.count$id),99)
感谢您的任何建议。
答案 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")