如何基于两列中任一列的重复值生成唯一ID?

时间:2019-06-09 09:42:03

标签: r uniqueidentifier

我希望基于两列中任一列的相同值生成唯一的ID。具体来说,我拥有一个历史时期内客户的电话号码和电子邮件。因此,即使客户在此时间段内更改了电话号码或电子邮件,我也想生成一个标识该客户的唯一ID。数据如下:

E-mail         Phone      Name
mortena        3076       morten
kaspera        2688       kasper
christoffera   1212       christoffer
mortenb        3076       morten
mortena        3075       morten
kasperb        2688       kasper
christoffera   1213       christoffer

我想产生这个结果:

E-mail         Phone      Name        ID
mortena        3076       morten      1
kaspera        2688       kasper      2
christoffera   1212       christoffer 3
mortenb        3076       morten      1
mortena        3075       morten      1
kasperb        2688       kasper      2
christoffera   1213       christoffer 3

非常感谢您的帮助!

我试图利用下面的代码。但是,这似乎是基于相同的电子邮件和电话号码创建ID的。我希望根据电子邮件或电话号码生成唯一的ID。

test_data %>% 
  mutate(ID = group_indices_(test_data, .dots=c("E.mail", "Phone")))

我希望脚本检查电话号码并为每个唯一的电话号码生成一个唯一的ID,如果找不到重复的电话号码,请通过电子邮件进行相同的操作。

1 个答案:

答案 0 :(得分:1)

在上面我的评论中,要重现相同的List<Integer> list = new ArrayList<>(); list.stream().map(xyz -> {}); // Here xyz is always of type Integer for this instance. // Then why does it take input as "? super Integer"? 顺序,您需要确保正确的ID级别的顺序

factor

或带有library(dplyr) df %>% mutate(ID = as.integer(factor(Name, levels = unique(Name)))) # E.mail Phone Name ID #1 mortena 3076 morten 1 #2 kaspera 2688 kasper 2 #3 christoffera 1212 christoffer 3 #4 mortenb 3076 morten 1 #5 mortena 3075 morten 1 #6 kasperb 2688 kasper 2 #7 christoffera 1213 christoffer 3

group_indices

如果df %>% mutate(ID = group_indices(., factor(Name, levels = unique(Name)))) 的顺序无关紧要,则可以

ID

df %>% mutate(ID = as.integer(as.factor(Name)))

在这些情况下,df %>% mutate(ID = group_indices(., Name)) 的顺序由唯一的ID的字母顺序确定(而不是由它们的出现决定)。


样本数据

Name