我尝试使用stringdist
函数匹配 Dataframe 中的两列药物名称,但无法获得所需结果。
我有一个数据框架,其中包含某人提供的原始药物名称,然后我有一个包含官方药物名称及其相应代码的列。
df <- data.frame(orig_names = c("KOGENATE", "KOGENATE", "ADVATE", "ADVATE"),
desired_names = c("KOGENATE FS", "ADVATE", "ADVATE", "RECOMBINATE"),
desired_names_code = c(1,2,3,4))
我希望仅保留那些具有最佳匹配的列,以便生成以下数据框
desired_df <- data.frame(orig_names = c("KOGENATE", "ADVATE"),
desired_names = c("KOGENATE FS", "ADVATE"),
desired_names_code = c(1,3))
我尝试过使用stringdist包中的各种方法,也尝试过改变距离度量,但结果差别很大。
library(stringdist)
result <- df %>%
filter(stringdist::stringdist(orig_names,desired_names, method = "jw") > 0.5)
如有任何建议,我们将不胜感激。
2条答案
按热度按时间uxhixvfz1#
我认为模糊匹配的方法是正确的。使用
fuzzyjoin
包可以让你连接(分开的)orig_names和desired_names,然后为每个desired_names找到最接近的匹配。这是一个有点奇怪的输出,因为你在desired_names中有两个“ADVATE”,但我仍然认为这是最干净的解决方案。lskq00tm2#
我能够使用
{stringr}
中的str_detect
实现我想要的结果