r - 在向量中查找字母数字元素

标签 r regex grepl

我有一个向量

    myVec <- c('1.2','asd','gkd','232','4343','1.3zyz','fva','3213','1232','dasd')

在这个向量中,我想做两件事:

  1. 从包含数字和字母的元素中删除任何数字,然后
  2. 如果一组字母后面跟着另一组字母,将它们合并为一个。

所以上面的向量看起来像这样:

'1.2','asdgkd','232','4343','zyzfva','3213','1232','dasd'

我想我会首先找到字母数字元素并使用 gsub 从中删除数字。 这个我试过了

    gsub('[0-9]+', '', myVec[grepl("[A-Za-z]+$", myVec, perl = T)])

    "asd"  "gkd"  ".zyz" "fva"  "dasd"

即它保留了我不想要的 .

最佳答案

这似乎返回了你想要的东西

myVec <- c('1.2','asd','gkd','232','4343','1.3zyz','fva','3213','1232','dasd')


clean <- function (x) {
  is_char <- grepl("[[:alpha:]]", x)
  has_number <- grepl("\\d", x)
  mixed <- is_char & has_number
  x[mixed] <- gsub("[\\d\\.]+","", x[mixed], perl=T)
  grp <- cumsum(!is_char | (is_char  & !c(FALSE, head(is_char, -1))))
  unname(tapply(x, grp, paste, collapse=""))
}

clean(myVec)
# [1] "1.2"    "asdgkd" "232"    "4343"   "zyzfva" "3213"   "1232"   "dasd" 

这里我们寻找混合在一起的数字和字母并删除数字。然后我们定义了用于折叠的组,寻找在其他字符之后出现的字符以将它们放在同一组中。然后我们最终折叠同一组中的所有值。

关于r - 在向量中查找字母数字元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58804816/

相关文章:

c++ - 用于从 C++ 代码中提取函数的正则表达式

php - 正则表达式 - preg_replace php - 理解

r - 如何替换 ggmap 对象中的颜色?

regex - 匹配两个字符串之间的所有内容

python - 在 Python 中使用中文

r - 除空 grep 之外的所有内容的子集都会返回空向量

r - 将角色分成几部分

r - 在Knitr/Rmarkdown中抑制消息

R:如何找到对象会调用什么 S3 方法?

r - 在特定列中与 grep 匹配的模式后过滤行