我正在使用grep
函数来识别字符串列表(或字符串col)是否部分存在于特定col(查询)中。
test$result <- sapply(test$query,function(x) ifelse(grep(paste(listofstring,collapse="|"),x),1,0))
有没有办法获得匹配的字符串而不是二进制输出?
例如:
listofstring <- c("Mac","Windows","Linux","Android")
test <- data.frame(query = c("I love Mac","I love Ubuntu","I love Android","I love both Android and Linux"))
使用上面的代码我可以得到输出:
Query Result
I love Mac 1
I love Ubuntu logical(0)
I love Android 1
I love both Android and Linux 1
但我真正想要的是匹配的值和所需的输出:
Query Result
I love Mac Mac
I love Ubuntu N/A
I love Android Android
I love both Android and Linux Android
I love both Android and Linux Linux
答案 0 :(得分:1)
我们可以尝试str_extract
library(stringr)
stack(setNames(lapply(str_extract_all(test$query,
paste(listofstring,collapse="|")), function(x)
if(length(x)==0) NA else x), test$query))[2:1]
# ind values
#1 I love Mac Mac
#2 I love Ubuntu <NA>
#3 I love Android Android
#4 I love both Android and Linux Android
#5 I love both Android and Linux Linux
在评论中使用字符串
str1 <- "a b c d e f g h"
str_match_all(str1, "(?=(a b|b c|c d))")[[1]][,2]
#[1] "a b" "b c" "c d"