我有以下数据集:
cust_ID Phone Email
1 A X
2 A Y
3 A Z
4 B X
5 B P
6 B Q
7 C P
8 C R
9 C S
每个独特的手机组合都没有。和电子邮件创建一个唯一的customer_id创建。如果电话号码或email_id重复,我会知道它属于同一个客户。我想使用可能的电话号码组合为所有这些客户创建一个唯一的ID。
cust_ID Phone Email ID
1 A X A-B-C
2 A Y A-B-C
3 A Z A-B-C
4 B X A-B-C
5 B P A-B-C
6 B Q A-B-C
7 C P A-B-C
8 C R A-B-C
9 C S A-B-C
如何使用R?
实现此目的答案 0 :(得分:0)
编辑
根据你的解释,我会这样做。
我模拟了数据
cust_ID=1:50
Phone=round(runif(n = 50,100,150))
Email=round(runif(n = 50,200,250))
以下概述了它的样子(这次我确定我理解正确)
cust_ID Phone Email
1 100 246
2 130 221
3 114 216
4 120 205
5 149 247
6 125 208
我计算了以下内容以获得finalID
我认为您正在寻找的内容:
df=as.data.frame(cbind(cust_ID,Phone,Email))
ID_Phone=df%>%
group_by(Phone)%>%
mutate(PhoneID=first(cust_ID))%>%
ungroup()
ID_mail=ID_Phone%>%group_by(Email)%>%
mutate(finalID=first(PhoneID))%>%
ungroup()
head(ID_mail%>%arrange(finalID),100)
这给出了结果
cust_ID Phone Email PhoneID finalID
1 100 246 1 1
2 130 221 2 2
36 109 221 17 2
40 109 221 17 2
43 143 221 11 2
3 114 216 3 3
41 115 216 41 3
4 120 205 4 4
45 122 205 45 4
5 149 247 5 5
上一篇文章(我误解了)
我会亲自使用dplyr
库并按以下步骤操作。假设您的数据存储在df
变量中。例如,我会考虑电话号码并公开具有几个不同Email
值的电话号码。我只关注Phone
,但您可以使用Email
然后群集cust_ID
重复该操作
df %>% group_by(Phone)
%>% summarise(
vector = paste(Email, collapse="__"),
cluster_similar_phone = paste(Cust_ID, collapse="__"))
此命令会为您提供具有唯一Phone
值的数据框和相应的Email
。根据你的例子,它应该给你类似
Phone vector cluster_similar_phone
A X__Y__Z 1__2__3
B X__P__Q 4__5__6
...
我可能会重复发送电子邮件,然后使用专栏cluster_similar_phone
和cluster_similar_email
对最终cust_ID
进行分组。
我不确定这是不是您要找的,但请注释,如果不是,我可以编辑和调整代码。
答案 1 :(得分:0)
以下代码为我提供了所需的结果。让我们调用我的样本数据集'd'。
Table PhoneBook
Field: FirstName, LastName, PhoneNumber, Address
最终数据集:
**> `
d<-d[order(d$cust_id),]
ID=d%>%
group_by(email)%>%
mutate(ID=first(cust_id))%>%
ungroup()
ID<-ID[order(ID$ID),]
ID=ID%>%
group_by(phone)%>%
mutate(ID1=first(ID))%>%
ungroup()
z=0
y=1
while (y!=0)
{
for (i in 1:nrow(ID))
{z<-z+ifelse(ID$ID[i]==ID$ID1[i],0,1)
i=i+1
}
ID<-ID[order(ID$ID1),]
ID=ID%>%
group_by(email)%>%
mutate(ID=first(ID1))%>%
ungroup()
ID<-ID[order(ID$ID),]
ID=ID%>%
group_by(phone)%>%
mutate(ID1=first(ID))%>%
ungroup()
y<-z
z=0
}
**
`
我的原始数据集包含80k行。如果有更好的方法,请告诉我。