使用 grepl 测试字符串变量中是否出现大量完整单词
Test if a large number of whole words appear in a string variable using grepl
我正在尝试使用 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”应该 return TRUE,而“davidson”应该 return FALSE。
我熟悉使用正则表达式来指定单词边界,例如\b
,但是,当我想使用 OR 语句进行如此多的测试时,我不确定该怎么做。
我真正想要的是以下内容:
id string test
1 clayville FALSE
2 madison FALSE
3 roberts TRUE
4 david TRUE
5 davidson FALSE
如能提供任何帮助,我们将不胜感激!
提前致谢,注意安全!
您可以使用 paste0
动态添加字边界:
df$test <- grepl(paste0('\b', test, '\b', collapse = '|'), df$string)
df
# id string test
#1 1 clayville FALSE
#2 2 madison FALSE
#3 3 roberts TRUE
#4 4 david TRUE
#5 5 davidson FALSE
我正在尝试使用 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”应该 return TRUE,而“davidson”应该 return FALSE。
我熟悉使用正则表达式来指定单词边界,例如\b
,但是,当我想使用 OR 语句进行如此多的测试时,我不确定该怎么做。
我真正想要的是以下内容:
id string test
1 clayville FALSE
2 madison FALSE
3 roberts TRUE
4 david TRUE
5 davidson FALSE
如能提供任何帮助,我们将不胜感激!
提前致谢,注意安全!
您可以使用 paste0
动态添加字边界:
df$test <- grepl(paste0('\b', test, '\b', collapse = '|'), df$string)
df
# id string test
#1 1 clayville FALSE
#2 2 madison FALSE
#3 3 roberts TRUE
#4 4 david TRUE
#5 5 davidson FALSE