R: отдельная строка на основе набора регулярных выражений - PullRequest
0 голосов
/ 29 октября 2018

У меня есть фрейм данных foo.df, который содержит одну переменную, которая представляет собой очень длинную строку, состоящую из нескольких подстрок. Кроме того, у меня есть векторы символов, которые соответствуют частям строки. Пример для переменной во фрейме данных:

foo.df$var[1] [1] "Peter Paul SmithLabour3984234.55%Hans NicholsConservative103394.13%Turnout294834.3%

Теперь пример для векторов символов:

head(candidates) [1] "Peter Paul Smith" "Hans Nichols" "Denny Gross" "Walter Mittens"<br> [5] "Charles Butt" "Mitch Esterhazy"

Я хочу создать переменную foo.df$candidate1, которая содержит имя первого кандидата, появляющегося в строке (т. Е. food.df$candidate1[1] будет Peter Paul Smith). Я пытался подойти к этому с grepl, но он не работает, так как grepl использует только первую первую запись из candidates. Есть идеи, как это можно сделать эффективно?

1 Ответ

0 голосов
/ 29 октября 2018

Вы можете использовать регулярное выражение ИЛИ, |, с paste и regmatches/regexpr.

candidates <- scan(what = character(), text = '
"Peter Paul Smith"  "Hans Nichols" "Denny Gross" "Walter Mittens"')

var1 <- "Peter Paul SmithLabour3984234.55%Hans NicholsConservative103394.13%Turnout294834.3%"

foo.df <- data.frame(var1)

pat <- paste(candidates, collapse = "|")
regmatches(foo.df$var1, regexpr(pat, foo.df$var1))
#[1] "Peter Paul Smith"

foo.df$candidate1 <- regmatches(foo.df$var1, regexpr(pat, foo.df$var1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...