首页 > 解决方案 > 两列中每一对的 vsetdiff

问题描述

我已经看到要计算两个字符串(s1 和 s2)中不同单词的数量,您可以使用:

length(vsetdiff(unlist(strsplit(s1," ")),unlist(strsplit(s2," "))))

如果我有两列字符串,我如何有效地计算两列之间每对字符串之间的不同单词的数量。例如,使用以下虚拟列:

a=as.data.frame(c("Insurance broker","Phone Operator","real estate agent","child care worker"))

colnames(a)=c("Occupation")

b=as.data.frame(c("Broker","Dog walker","health care coordinator"))

colnames(b)=c("Job")

我想计算 Occupation 和 Job 列中每对条目之间不同单词的数量

编辑:

澄清:

我想要一些矩阵(即 4x3 或 3x4)来计算两者之间的差异

保险经纪人和经纪人

保险经纪人和遛狗者

保险经纪人和医疗保健协调员

...

儿童保育员和医疗保健协调员

标签: stringmatch

解决方案


library(stringr)
l_1 = unlist(str_split(a$Occupation, " "))
l_2 = unlist(str_split(b$Job, " "))
> sum(!l_1 %in% l_2)
[1] 9
> sum(!l_2 %in% l_1)
[1] 5
> l_1[l_1 %in% l_2]
[1] "care"
> l_2[l_2 %in% l_1]
[1] "care"

推荐阅读