R:基于正则表达式集的单独字符串

时间:2018-10-29 13:19:15

标签: r string dataframe match

我有一个数据帧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"
[5] "Charles Butt" "Mitch Esterhazy"

我想创建一个变量foo.df$candidate1,该变量包含出现在字符串中的第一个候选者的名称(即food.df$candidate1[1]将是Peter Paul Smith)。我试图用grepl来解决这个问题,但是它不起作用,因为grepl仅使用candidates中的第一个条目。知道如何有效地做到这一点吗?

1 个答案:

答案 0 :(得分:1)

您可以将正则表达式或字符|pasteregmatches/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))