我有一个带有已注册药物名称的文本向量,另一个带有新药物名称的文本向量。我想知道新药是否看起来像已经存在的药物。
例如,如果 supercure 是一种可以由公司 1 或公司 2 生产的药物,并且supercure firm1 1000mg
已经supercure firm2 500mg
注册,那么supercure firm1 500 mg
应该与他们两者相关联。
agrep
允许在 R 中进行这种匹配,并sapply
允许对新列表中的每种药物进行匹配:
new<-c("supercure firm1 500mg","randomcure firm2 1000mg","unknowncure firm2 100mg")
registered<-c("supercure firm1 1000mg","supercure firm2 500mg","randomcure firm1 1000mg")
res<-unlist(sapply(new,agrep,x=registered))
res
正如预期的那样,supercure 得到两个匹配,randomcure 一个匹配和 unknowncure 没有匹配(这是我想要的)。但是,sapply
似乎已经更改了名称,因此没有重复的 :supercure firm1 500mg
成为supercure firm1 500mg1
和supercure firm1 500mg2
:
supercure firm1 500mg1 supercure firm1 500mg2 randomcure firm2 1000mg
1 2 3
这是一个问题,因为它阻止我从新列表中选择匹配的药物:
new[new %in% names(res)]
仅捕获 randomcure(因为 supercure 的名称已更改)。
我可以想办法通过相当不优雅的文本处理来解决这个问题,但是有没有更聪明的方法来获取找到匹配项的新药列表?
理想的输出是:
supercure firm1 500mg supercure firm1 500mg randomcure firm2 1000mg
1 2 3