LeG*_*sII 2 string r contain grepl data.table
我有:
> lst_A <- c("TET","RNR")
> DT_result <- data.table(lst_B = c("RNR_B","BC_TET"))
Run Code Online (Sandbox Code Playgroud)
我想要:
> DT_result <- data.table(lst_B = c("RNR_B","BC_TET"), result = c(TRUE,TRUE))
> DT_result
lst_B result
1: RNR_B TRUE
2: BC_TET TRUE
Run Code Online (Sandbox Code Playgroud)
基本上,对于'lst_B'中的每个元素,如果它包含'lst_A'中的任何元素,则TRUE否则为FALSE.
你可以使用它grepl.
lst_A <- c("TET","RNR")
lst_B = c("RNR_B","BC_TET")
Pattern = paste(lst_A, collapse="|")
grepl(Pattern, lst_B)
library(data.table)
DT_result <- data.table(lst_B, result=grepl(Pattern, lst_B))
DT_result
lst_B result
1: RNR_B TRUE
2: BC_TET TRUE
Run Code Online (Sandbox Code Playgroud)
要回复评论,这是一个包含更多要测试的字符串的示例.有些人通过考试,有些则没有.
lst_A <- c("TET","RNR")
lst_B = c("RNR_B","BC_TET", "Fred", "RNR_A", "Zero", "ABC_TET")
Pattern = paste(lst_A, collapse="|")
DT_result <- data.table(lst_B, result=grepl(Pattern, lst_B))
DT_result
lst_B result
1: RNR_B TRUE
2: BC_TET TRUE
3: Fred FALSE
4: RNR_A TRUE
5: Zero FALSE
6: ABC_TET TRUE
Run Code Online (Sandbox Code Playgroud)
使用stringr的str_detect
stringr::str_detect(DT_result$lst_B,'TET|RNR')
[1] TRUE TRUE
#DF['hit']=stringr::str_detect(DT_result$lst_B,'TET|RNR')
Run Code Online (Sandbox Code Playgroud)