R 匹配特征向量
R Match character vectors
var1 是一个字符向量
var1 <- c("tax evasion", "all taxes", "payment")
并且 var2 是另一个字符向量
var2 <- c("bill", "income tax", "sales taxes")
想要比较 var1 和 var2 并提取具有部分单词匹配的术语,例如,在这种情况下所需的答案将是以下字符向量:
"tax evasion", "all taxes", "income tax", "sales taxes"
我试过了
sapply(var1, grep, var2, ignore.case=T,value=T)
但没有得到想要的答案。怎么做到的?
谢谢。
也许你需要
lst1 <- strsplit(var1, ' ')
lst2 <- strsplit(var2, ' ')
indx1 <- sapply(lst1, function(x) any(grepl(paste(unlist(lst2),
collapse="|"), x)))
indx2 <- sapply(lst2, function(x) any(grepl(paste(unlist(lst1),
collapse="|"), x)))
c(var1[indx1], var2[indx2])
#[1] "tax evasion" "all taxes" "income tax" "sales taxes"
如果 var1 和 var2 之间有交集,用 unique
包裹起来,就像@ColonelBeauvel 在他优雅的解决方案中所做的那样。
你可以这样做(为了代码的清晰,我使用 magrittr 包):
library(magrittr)
findIn = function(u, v)
{
strsplit(u,' ') %>%
unlist %>%
sapply(grep, value=T, x=v) %>%
unlist %>%
unique
}
unique(c(findIn(var1, var2), findIn(var2, var1)))
#[1] "income tax" "sales taxes" "tax evasion" "all taxes"
var1 是一个字符向量
var1 <- c("tax evasion", "all taxes", "payment")
并且 var2 是另一个字符向量
var2 <- c("bill", "income tax", "sales taxes")
想要比较 var1 和 var2 并提取具有部分单词匹配的术语,例如,在这种情况下所需的答案将是以下字符向量:
"tax evasion", "all taxes", "income tax", "sales taxes"
我试过了
sapply(var1, grep, var2, ignore.case=T,value=T)
但没有得到想要的答案。怎么做到的?
谢谢。
也许你需要
lst1 <- strsplit(var1, ' ')
lst2 <- strsplit(var2, ' ')
indx1 <- sapply(lst1, function(x) any(grepl(paste(unlist(lst2),
collapse="|"), x)))
indx2 <- sapply(lst2, function(x) any(grepl(paste(unlist(lst1),
collapse="|"), x)))
c(var1[indx1], var2[indx2])
#[1] "tax evasion" "all taxes" "income tax" "sales taxes"
如果 var1 和 var2 之间有交集,用 unique
包裹起来,就像@ColonelBeauvel 在他优雅的解决方案中所做的那样。
你可以这样做(为了代码的清晰,我使用 magrittr 包):
library(magrittr)
findIn = function(u, v)
{
strsplit(u,' ') %>%
unlist %>%
sapply(grep, value=T, x=v) %>%
unlist %>%
unique
}
unique(c(findIn(var1, var2), findIn(var2, var1)))
#[1] "income tax" "sales taxes" "tax evasion" "all taxes"