我有一个数据帧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
中的第一个条目。知道如何有效地做到这一点吗?
答案 0 :(得分:1)
您可以将正则表达式或字符|
与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))