2017-07-04 47 views
-1

我有一个包含发件人姓名和/或发件人电子邮件地址的数据集。R - 比较类似但不相同的字符串

sender_info = c('Kelvin [mailto:[email protected]]','Kelvin','Sheryl [mailto:[email protected]]','Sheryl <[email protected]>','Oscar',) 

我想检查唯一发件人的数量。从sender_info可以看出,有3个独特的发件人 - Kelvin,Sheryl和Oscar。

我试着实施一些方法,但他们不工作。其中一个涉及使用R RecordLinkage库中的levenshteinSim()函数来检查每个元素的相似程度。然而,当元素太不相同时(例如'Kelvin [mailto:[email protected]]'和'Kelvin'),此方法失败。

我真的很感激,如果有人能给我一两个提示如何解决这个问题。谢谢!

+0

我会试着去标准化你的字符串。将它们分为姓名和电子邮件,然后进行比较。看看r标签上的许多正则表达式/正则表达式问题,以获得有关提取符合模式的字符串的一些建议 - 尝试在本网站上搜索“[r] [regex]”。 – thelatemail

+0

'gsub(“[] [<>] | mailto:”,“”,sender_info)'作为初始者清除不相关的位。 – thelatemail

+0

@thelatemail好的,我会试试看!谢谢! :) – OinkOink

回答

2

如果你的数据结构总是喜欢提到的样品,这些代码将有助于:

sender_info = c('Kelvin [mailto:[email protected]]','Kelvin','Sheryl [mailto:[email protected]]','Sheryl <[email protected]>','Oscar') 
    new_sender <- sapply(strsplit(sender_info, split = " "), "[[", 1) 
    unique(new_sender) 
    #[1] "Kelvin" "Sheryl" "Oscar" 
+0

非常感谢你! :) – OinkOink

1

的替代strsplitstringrstr_split

library(stringr) 
unique(str_split(sender_info, pattern = " ", simplify = TRUE)[,1]) 
# [1] "Kelvin" "Sheryl" "Oscar" 
相关问题