【发布时间】:2021-03-15 02:15:57
【问题描述】:
我正在尝试使用grepl 来测试一个字符串变量(大约 30,000 个案例)是否包含相对较大的单词列表(大约 1,000 个)中的任何整个单词。这是一个例子:
###create string variable to be tested (note: real data has about 30,000 cases)
string <- c("clayville", "madison", "roberts", "david", "davidson")
df <- data.frame("id" = as.numeric(1:5), "string" = string, stringsAsFactors = FALSE)
###create a vector of words to test against string in df (note: real data has aobut 1,000 words)
test <- c("clay", "roberts", "david")
现在,我知道如何使用grepl 来测试“test”的任何部分是否包含在“string”中,如下所示:
df$test <- grepl(paste(test, collapse = "|"), df$string)
这给出了以下内容:
id string test
1 clayville TRUE
2 madison FALSE
3 roberts TRUE
4 david TRUE
5 davidson TRUE
当然,这并不能完全满足我的需求,因为我的代码没有考虑到我只对整个单词感兴趣这一事实。例如,在我的示例数据中,“david”应该返回 TRUE,而“davidson”应该返回 FALSE。
我熟悉使用正则表达式来指定单词边界,例如\\b,但是,当我想使用 OR 语句进行如此多的测试时,我不确定该怎么做。
我真正想要的是以下内容:
id string test
1 clayville FALSE
2 madison FALSE
3 roberts TRUE
4 david TRUE
5 davidson FALSE
如果你们能提供任何帮助,我们将不胜感激!
提前致谢,注意安全!
【问题讨论】: