如何根据两列中任一列中的重复值生成唯一 ID?
How to generate a unique ID based on duplicate values in either of two columns?
我希望根据两列中任一列中的相同值生成唯一 ID。具体来说,我有历史时期客户的 phone 号码和电子邮件。因此,我想生成一个识别客户的唯一 ID,即使客户在此时间段内更改了 phone 号码或电子邮件。数据如下所示:
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
非常感谢任何帮助!
我尝试使用下面的代码。但是,这似乎是根据相同的电子邮件和 phone 号码创建 ID。我希望根据电子邮件或 phone 号码生成唯一 ID。
test_data %>%
mutate(ID = group_indices_(test_data, .dots=c("E.mail", "Phone")))
我希望脚本检查 phone 号码并为每个唯一的 phone 号码生成一个唯一的 ID,如果它找不到任何重复的 phone 号码然后通过电子邮件并做同样的事情。
根据我上面的评论,要重现相同的 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
的字母顺序(而不是它们的出现)决定。
示例数据
df <- read.table(text = "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", header = T)
我希望根据两列中任一列中的相同值生成唯一 ID。具体来说,我有历史时期客户的 phone 号码和电子邮件。因此,我想生成一个识别客户的唯一 ID,即使客户在此时间段内更改了 phone 号码或电子邮件。数据如下所示:
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
非常感谢任何帮助!
我尝试使用下面的代码。但是,这似乎是根据相同的电子邮件和 phone 号码创建 ID。我希望根据电子邮件或 phone 号码生成唯一 ID。
test_data %>%
mutate(ID = group_indices_(test_data, .dots=c("E.mail", "Phone")))
我希望脚本检查 phone 号码并为每个唯一的 phone 号码生成一个唯一的 ID,如果它找不到任何重复的 phone 号码然后通过电子邮件并做同样的事情。
根据我上面的评论,要重现相同的 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
的字母顺序(而不是它们的出现)决定。
示例数据
df <- read.table(text = "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", header = T)