删除向量中包含R中纯数字的元素

时间:2018-06-01 21:23:35

标签: r

我有一个包含

等字符元素的向量

"2-CONTROL", "DAN-COLOR", "3M", "DIPLOMVEJ 373", "ABE 34 HUN"

我想过滤掉字符串中具有独立数字的元素。如果数字附加到字母或连字符,则不应过滤。

上述向量将在过滤后给出以下结果。

"2-CONTROL", "DAN-COLOR", "3M"

我尝试在grepl中使用"\\b\\d+\\b",但它也会过滤掉"2-CONTROL"

3 个答案:

答案 0 :(得分:2)

1)用X替换不是数字而不是空格的每个字符,然后使用正则表达式:

pat <- "\\b\\d+\\b" # from question

x[!grepl(pat, gsub("[^[:space:][:digit:]]", "X", x))]
## [1] "2-CONTROL" "DAN-COLOR" "3M"

2)另一种可能性是拆分空格并拒绝包含所有数字元素的任何内容。

x[sapply(strsplit(x, "\\s+"), function(x) !any(grepl("^\\d+$", x)))]
## [1] "2-CONTROL" "DAN-COLOR" "3M"  

答案 1 :(得分:0)

对于tidyverse方法,请使用stringr::str_detect()

library(stringr)

strings <- c("2-CONTROL", "DAN-COLOR", "3M", "DIPLOMVEJ 373", "ABE 34 HUN")
pattern <- " \\d+ ?" # match free-standing integers

strings[!str_detect(strings, pattern)]
# [1] "2-CONTROL" "DAN-COLOR" "3M" 

答案 2 :(得分:-1)

否定逻辑似乎有效:

regexp <- "\\d{2,}"

x <- c("2-CONTROL", "DAN-COLOR", "3M", "DIPLOMVEJ 373", "ABE 34 HUN")
res <- x[!grepl(regexp, x)]
res
# "2-CONTROL" "DAN-COLOR" "3M"