我想检查列值和字符串列表之间是否存在紧密匹配。很少有完美的匹配,所以%中的%并不好。我宁愿谨慎而不愿错过一些东西,但是我宁愿避免在每个单独的单词
中匹配潜在的模式。例如
列表:
Tenis PLC
Green Company Limited
(DCC) Darth Company Creditors
Dataframe
ID. Company Name
10. Ten LTD
12. Green Company (GC) LTD
23 MCC
48. DARTH
返回False
True
False
True
编辑:我应该提一下,我现在已经清理了一些数据,使其全部小写,并删除任何括号
再生你的数据:
l = list(tolower(c('Tenis PLC',
'Green Company Limited',
'(DCC) Darth Company Creditors')))
tmp_df = data.frame(Company_Name=c(tolower(c('Ten LTD', 'Green Company (GC) LTD', 'MCC',
'DARTH'))))
解决方案:
- 获取所有被空格分割的子字符串:
split1 = unlist(strsplit(unlist(l), ' '))
- 查找
Company_name
中的任何值是否包含它们(假设这就是您的意思):
sapply(tmp_df$Company_Name,
function(x) {sum(unlist(strsplit(x, ' ')) %in% split1) >= 1})
编辑:在split1
中保留至少3个字符的项目:
split1[sapply(split1, nchar) > 3]