【发布时间】:2020-07-29 12:14:08
【问题描述】:
我正在使用 R 并且我有两个数据框。一个数据框 my_data 是我的主要数据集,其中包含订单数据,另一个 word_list 包含我想与 my_data 匹配的单词列表。
这是两个数据框的可重现示例:
my_data <- data.frame(
Order = c("1","2", "3", "4", "5", "6"),
Product_ID = c("TS678", "AB123", "PACK12, 1xGF123, 1xML680", "AB123", "PACK13, 1xML680, 1x2304TR", "GF123"))
word_list <- data.frame(
Codes = c("TS678","AB123", "GF123", "CC756"),
Product_Category = c("Apple", "Apple", "Orange", "Orange"))
我想做的是将my_data 中的 Product_ID 与word_list 中的代码相匹配,并在my_data 中添加一个新列,其中匹配来自word_list 的 Product_Category。
但是,我需要实现完全匹配并考虑代码组合(如示例数据中的“PACK”所示,它在一列中包含多个产品代码)
对于最终的数据框,我希望得到以下结果:
- 完全匹配 -> 添加相应的 Product_Category,例如“苹果”
- 匹配包含来自
word_list的代码但也包含其他代码的列。某些产品是 Packs 并且 ID 与其他 ID 混合在一起 -> 如果包含“apple”的代码以及包含其他代码,这将导致“Apple + Other”。这里的另一个问题是需要匹配的Code还带有一个计数(例如,PACK12包括1x GF123、1xML680等) - 应将不包含完全匹配或混合匹配的所有列分配为“其他”
为了更好地理解,我希望得到的最终结果是一个如下所示的数据框:
my_data_result <- data.frame(
Order = c("1","2", "3", "4", "5", "6"),
Product_ID = c("TS678", "AB123", "PACK12, 1xGF123, 1xML680", "AB123", "PACK13, 1xML680, 1x2304TR", "GF123"),
Product_Category = c("Apple", "Apple", "Orange + Other", "Apple", "Other", "Orange"))
我认为这可以使用 regex 和 gsub 来完成,但我不确定如何。
谢谢!
【问题讨论】:
-
就
merge()... -
嗨@Sotos!我不确定,但据我了解,“合并”不会考虑混合匹配,因此我有多个产品 ID 的列 - 例如上面示例中的“PACK12、1xGF123、1xML680”。跨度>
-
抱歉。我没听懂。
-
@Sotos,也许还要补充一件事:我的匹配列表中也没有所有产品代码,只有“Apple”和“Orange”的代码。所有其他产品代码都无关紧要,但我需要考虑到它们有时会与 Apple 和 Orange 在一个列中同时出现。