如何根据R中字符串中匹配的字数匹配字符串
我对R非常陌生,我正在尝试根据包含产品名称的字符串匹配R中的两个数据帧。品牌名称与产品名称位于不同的数组中。 对于不同的产品,变体通常位于字符串的末端,对于产品变体(即颜色),变体位于字符串的末端/中间 不幸的是,我收到了很多误报或不匹配的产品如何根据R中字符串中匹配的字数匹配字符串,r,string,pattern-matching,string-matching,R,String,Pattern Matching,String Matching,我对R非常陌生,我正在尝试根据包含产品名称的字符串匹配R中的两个数据帧。品牌名称与产品名称位于不同的数组中。 对于不同的产品,变体通常位于字符串的末端,对于产品变体(即颜色),变体位于字符串的末端/中间 不幸的是,我收到了很多误报或不匹配的产品 使用levenshtein距离,这两个产品匹配为假阳性 品牌名称=[阿迪达斯正品],产品名称=[香蕉印刷罐] 顶部] 品牌名称=[阿迪达斯正品],产品名称=[香蕉印刷品] 短裤] 我目前使用的方法在得分方面没有区别 不同产品之间的差异 同一行(如上所示
- 使用levenshtein距离,这两个产品匹配为假阳性 品牌名称=[阿迪达斯正品],产品名称=[香蕉印刷罐] 顶部] 品牌名称=[阿迪达斯正品],产品名称=[香蕉印刷品] 短裤]
- 我目前使用的方法在得分方面没有区别 不同产品之间的差异 同一行(如上所示),要么漏掉了很多产品,要么导致虚假回复 品牌名称=[阿迪达斯正品],产品名称=[超级明星80年代黑色金属鞋头训练鞋] 品牌名称=[阿迪达斯正品],产品名称=[超级明星超级彩色日光浴运动鞋]
Brand store1 Prod.name store1
Adidas Originals Bananas Print Tank Top
Adidas Originals Bananas Print Shorts
Oasis Geo Lace Drape Cardigan
Michael Kors Hamilton Saffiano Leather Tote
Phase Eight Analise Print Dress
Indulgence Red maxi dress
仓库2
Brand store2 Prod.name store2
Adidas Originals Bananas Print Tank Top
Adidas Originals Superstar Super Colour Sun Glow Trainers
Oasis Geo Lace Drape Cardigan
Michael Kors Hamilton Saffiano Leather Tote
Phase Eight Analise Print Dress
Indulgence Red maxi dress
我想如何匹配它们
Brand store1 Prod.name store1 Prod.name store2
Adidas Originals Bananas Print Tank Top Bananas Print Tank Top
Adidas Originals Bananas Print Shorts NULL
Oasis Geo Lace Drape Cardigan Geo Lace Drape Cardigan
Michael Kors Hamilton Saffiano Leather Tote Hamilton Saffiano Leather Tote
Phase Eight Analise Print Dress Analise Print Dress
Indulgence Red maxi dress Red maxi dress
下面是我正在使用的代码(在r-bloggers的帮助下)编辑:
source1.devices欢迎使用SO!我认为,如果您添加一些正确的匹配项/预期输出,将会有所帮助。发布数据的一种方法是复制dput(head(source1.devices,10))
和dput(head(source2.devices,10))
的输出,谢谢你的欢迎:)你的意思是,添加正确的匹配将“训练”我的评分算法并提高准确性吗?不,我相信他的意思是,将更多来自store1.csv
和store2.csv
的示例输入数据添加到您的帖子以及解决方案的理想输出中会有所帮助。这里的大多数读者快速扫描输入数据帧和请求输出数据帧,而不是阅读文本和冗长的代码示例。:)我们的目的是不知道你想要什么。您应该提供一个包含您想要获得的输出的小型数据集。请参阅以获得一些指导。感谢您让我知道(再次向SO表示歉意,我是新来的)。我已经在原始问题中添加了示例文件,并记录了编辑。谢谢欢迎来到SO!我认为,如果您添加一些正确的匹配项/预期输出,将会有所帮助。发布数据的一种方法是复制dput(head(source1.devices,10))
和dput(head(source2.devices,10))
的输出,谢谢你的欢迎:)你的意思是,添加正确的匹配将“训练”我的评分算法并提高准确性吗?不,我相信他的意思是,将更多来自store1.csv
和store2.csv
的示例输入数据添加到您的帖子以及解决方案的理想输出中会有所帮助。这里的大多数读者快速扫描输入数据帧和请求输出数据帧,而不是阅读文本和冗长的代码示例。:)我们的目的是不知道你想要什么。您应该提供一个包含您想要获得的输出的小型数据集。请参阅以获得一些指导。感谢您让我知道(再次向SO表示歉意,我是新来的)。我已经在原始问题中添加了示例文件,并记录了编辑。谢谢
source1.devices<-read.csv('store1.csv')
source2.devices<-read.csv('store2.csv')
source1.devices$name<-as.character(store1.csv$prod.name)
source2.devices$name<-as.character(store2.csv$prod.name)
dist.name<-adist(store1.csv$prod.name,store2.csv$prod.name, partial = TRUE, ignore.case = TRUE)
min.name<-apply(dist.name, 1, min)
match.s1.s2<-NULL
for(i in 1:nrow(dist.name))
{
s2.i<-match(min.name[i],dist.name[i,])
s1.i<-i
match.s1.s2<-rbind(data.frame(s2.i=s2.i,s1.i=s1.i,s2name=store2.csv[s2.i,]$prod.name, s1name=store1.csv[s1.i,]$prod.name, adist=min.name[i]),match.s1.s2)
}
View(match.s1.s2)