r - 匹配 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”不匹配,尽管字符包含在字符串中但不包含在单词中。我不知道该怎么做。
谢谢你。
解决方案
也许这会有所帮助
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
推荐阅读
- c++ - 如何在 C++ 中将值放入由 VirtualAlloc 分配的内存中?
- python - 出于组织目的使用仅具有静态方法的类?
- python - ImportError:没有名为 PyQt5 的模块
- php - Laravel 5.7 错误消息“ Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException No message”
- python - PyCharm SSH 解释器 - 环境:/Program Files/Python 3.5/python.exe:没有这样的文件或目录
- r - 按行名组合/匹配/合并向量
- c# - 同步使用 HttpClient 的“正确方法”是什么?
- eclipse - 是否可以在 Eclipse 中禁用捏合缩放?
- netlogo - Netlogo 编码 - IF 代码
- r - R包未来:计划()的初始化失败