【发布时间】:2021-11-19 18:09:54
【问题描述】:
我有一个 df 如下
+-------+---------+-------+
| Brand | WORD | Count |
+-------+---------+-------+
| ABC | cell | 1 |
| DEF | dock | 2 |
| XYZ | surface | 3 |
| LMN | pro | 4 |
| ABC | mobile | 5 |
| DEF | game | 6 |
| XYZ | mouse | 7 |
+-------+---------+-------+
还有一个:
+-------+-----------------+--------+
| Brand | Name | profit |
+-------+-----------------+--------+
| ABC | cell game | 10 |
| ABC | cellular mobile | 20 |
| DEF | docking station | 30 |
| XYZ | surface mouse | 40 |
| XYZ | mouse device | 50 |
| LMN | pro device | 60 |
+-------+-----------------+--------+
我想通过部分字符串匹配(逐字逐句,意味着单元格仅与单元格而不是蜂窝单元匹配)单词和名称并按品牌分组来合并它们,因此结果表如下:
+-------+---------------+-----------------+-------+--------+
| Brand | WORD | Name | Count | profit |
+-------+---------------+-----------------+-------+--------+
| ABC | cell | cell game | 1 | 10 |
| ABC | mobile | cellular mobile | 5 | 20 |
| XYZ | surface mouse | surface mouse | 3 | 40 |
| XYZ | mouse | mouse device | 7 | 50 |
| XYZ | mouse | mouse device | 7 | 50 |
| LMN | pro | pro device | 4 | 60 |
+-------+---------------+-----------------+-------+--------+
我尝试使用这里的解决方案 R partial string matching and return value (in R)
但它甚至匹配字符串的一部分,例如单元格将与蜂窝匹配 想知道是否有办法让字符串完全匹配并以所需的形式获得结果
【问题讨论】:
-
这会很棘手。您将不得不定义一大堆新元素。例如,为什么表面鼠标不能与鼠标设备连接?两者都包含单词mouse。我的意思是对人类大脑来说,我们知道为什么您希望 Surface 鼠标与 Surface 鼠标连接,但我不明白您为什么不希望它与鼠标设备连接
-
在类似的情况下,我当时的解决方案是首先“清理”名称列以删除可能发生的脱靶实例。在您给出的脱靶示例中,可能会执行
df2$Name = gsub("cellular mobile", "mobile", df2$Name)之类的操作。不完美,但如果你没有很多脱靶的部分匹配,那么只需进行一点数据检查,这对你来说就可以了。
标签: r string dplyr fuzzywuzzy