R:当列包含与字符向量中的值相似的值时,如何删除数据帧中的行?

R:当列包含与字符向量中的值相似的值时,如何删除数据帧中的行?,r,dataframe,filtering,matching,R,Dataframe,Filtering,Matching,我在数据框中有一列,列出了各种药物。但是,同一药物的实例可能拼写稍有不同,或者加上另一个词(例如,“布洛芬”、“布洛芬200mg”、“布洛芬丸”)。我想在数据帧的列中找到与我在字符向量中输入的值相似的每个实例。因此,对于上面的例子,如果我的字符向量有“布洛芬”,我想删除该列中相应值有“布洛芬丸”或“布洛芬200mg”等的任何行 我已经尝试过使用dplyr进行过滤,但它只删除完整的匹配项。我确保我正在寻找类似匹配项的列也是“character”类 药物列表我正在增强您的示例数据,以包括一些不应删除

我在数据框中有一列,列出了各种药物。但是,同一药物的实例可能拼写稍有不同,或者加上另一个词(例如,“布洛芬”、“布洛芬200mg”、“布洛芬丸”)。我想在数据帧的列中找到与我在字符向量中输入的值相似的每个实例。因此,对于上面的例子,如果我的字符向量有“布洛芬”,我想删除该列中相应值有“布洛芬丸”或“布洛芬200mg”等的任何行

我已经尝试过使用dplyr进行过滤,但它只删除完整的匹配项。我确保我正在寻找类似匹配项的列也是“character”类


药物列表我正在增强您的示例数据,以包括一些不应删除的内容

df = read.table(text="ID   meds
    2    ibuprofen
    3    'Ibuprofen Pill'
    4    'ibuprofen 200 mg'
    5    'iBuprofen/ inhaler'
    6    'melatonin/ ibuprofen/ aspirin 500 mg'
    7    melatonin
    8    'pure water'",
stringsAsFactors=F, header=T)

df[-grep(paste(list_of_meds, collapse="|"), df$meds, ignore.case=T),]
      meds
6  7  melatonin
7  8 pure water

这只是生成一个正则表达式来查找任何包含作为子字符串列出的药物之一的med列表。然后找到这些行并删除它们。

似乎需要正则表达式。请提供一个可复制的数据框示例。@已添加www示例@m4148是否要删除所有这些药物,包括最后一种?@G5W是的,我列表中任何一种药物的实例,即使还有其他药物列出!
df = read.table(text="ID   meds
    2    ibuprofen
    3    'Ibuprofen Pill'
    4    'ibuprofen 200 mg'
    5    'iBuprofen/ inhaler'
    6    'melatonin/ ibuprofen/ aspirin 500 mg'
    7    melatonin
    8    'pure water'",
stringsAsFactors=F, header=T)

df[-grep(paste(list_of_meds, collapse="|"), df$meds, ignore.case=T),]
      meds
6  7  melatonin
7  8 pure water