удаление элементов в векторе, которые содержат чистые числа в R - PullRequest
0 голосов
/ 02 июня 2018

У меня есть вектор с символьными элементами, такими как

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

Я бы хотел отфильтровать элементы, которые имеют независимые числа в строке.Если число прикреплено к алфавиту или дефису, его не следует фильтровать.

Приведенный выше вектор даст следующий результат после фильтрации.

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

Я пытался использовать "\\b\\d+\\b"внутри grepl, но он также отфильтровывает "2-CONTROL"

Ответы [ 3 ]

0 голосов
/ 02 июня 2018

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"  
0 голосов
/ 02 июня 2018

Для подхода 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" 
0 голосов
/ 02 июня 2018

Логика отрицания работает:

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"  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...