Использование переменных вместе со строками в регулярном выражении в R - PullRequest
0 голосов
/ 12 ноября 2018

Мой набор данных состоит из нескольких адресов электронной почты, чьи домены я пытаюсь очистить:

id <- c(1,2,3,4,5)
email <- c('jim@chase.com','steve@aol.com','stacy@gmail.com/','chris@yahoo.com','emilio@verizon.net/')
sample <- data.frame(id,email)

Я пытаюсь удалить строки на основе импортированного файла .txt, содержащего домены; например, домены.txt состоит из

chase.com verizon.net

Я читаю .txt файл с

domains <- read_file('C:\\\\me\\domains.txt')
domains <- strsplit(domains, ' ')

но тогда я в растерянности относительно того, как успешно их очистить. Я пробовал два решения, одно с кодом regex и одно без:

sample <- sample[!(paste0('^',domains,'$') %in% sample$email)]

sample$domains <- grepl(paste0('^',domains,'$'),sample$email)
sample <- subset(sample, domains == FALSE, select = c(id,email))

Первый преобразует мои данные в тиббл (что приводит к ошибке Column indexes must be at most 4 if positive, not 5, 6, 7, 8, 9, 10 всякий раз, когда я пытаюсь их отобразить), а второй возвращает FALSE для всех доменов, включая те, которые содержат домены, перечисленные в domains переменная.

Как я могу создать «поиск и уничтожение» regex, используя переменную, если в строке есть текст по обе стороны от переменной, которую также необходимо прочитать?

1 Ответ

0 голосов
/ 12 ноября 2018

Мы paste элементы 'pat' в одну строку с paste, разделенными |, чтобы сопоставить любой из элементов со столбцом 'email', использование grepl возвращает логический индекс, отрицание (!), чтобы изменить ИСТИНА на ЛОЖЬ и наоборот, подмножество строк 'семпла'

sample[!grepl(paste(pat, collapse="|"), sample$email), , drop = FALSE]

данные

pat <- c('chase.com', 'verizon.net')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...