首页 > 解决方案 > 匹配 R 列表中的产品

问题描述

我必须对这些产品列表进行分类:

product_list<-data.frame(product=c('banana from ecuador 1 unit', 'argentinian meat (1 kg) cow','chicken breast','noodles','salad','chicken salad with egg'))

基于此向量的每个元素中包含的单词:

product_to_match<-c('cow meat','deer meat','cow milk','chicken breast','chicken egg salad','anana')

我必须将每个产品 product_to_match 的所有单词匹配到数据框的每个元素中。

我不确定最好的方法是什么,以便将每个产品分类到一个新列中,以便有这样的东西:

product_list<-data.frame(product=c('banana from ecuador 1 unit', 'argentinian meat (1 kg) 
cow','chicken breast','noodles','salad','chicken salad with egg'),class=c(NA,'cow meat','chicken 
breast',NA,NA,'chicken egg salad'))

请注意,“anana”与“banana”不匹配,尽管字符包含在字符串中但不包含在单词中。我不知道该怎么做。

谢谢你。

标签: r

解决方案


也许这会有所帮助

q <- outer(
  strsplit(product_to_match, "\\s+"),
  strsplit(product_list$product, "\\s+"),
  FUN = Vectorize(function(x, y) all(x %in% y))
)
product_list$class <- product_to_match[replace(colSums(q * row(q)), colSums(q) == 0, NA)]

这样

> product_list
                      product             class
1  banana from ecuador 1 unit              <NA>
2 argentinian meat (1 kg) cow          cow meat
3              chicken breast    chicken breast
4                     noodles              <NA>
5                       salad              <NA>
6      chicken salad with egg chicken egg salad

推荐阅读