r - 如何根据两列中的任何一列中的重复值生成唯一 ID?
问题描述
我希望根据两列中的任何一列中的相同值生成唯一 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,如果找不到任何重复的电话号码,则通过电子邮件执行相同的操作。
解决方案
根据我上面的评论,要重现相同的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
s 的顺序无关紧要,你可以这样做
df %>% mutate(ID = as.integer(as.factor(Name)))
或者
df %>% mutate(ID = group_indices(., Name))
在这些情况下, 的顺序ID
由唯一Name
s 的字母顺序(而不是它们的出现)决定。
样本数据
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)
推荐阅读
- php - DialogFlow PHP 卷曲
- google-bigquery - 我想在我的选择查询结果中显示一个额外的列,并且该额外的列结果也是一个选择语句
- php - 如何将实体上的外键映射为Doctrine中的字段和映射?
- python - Flask UnboundLocalError:分配前引用的局部变量'latitu'
- rust - 为什么 match 表达式不会先于其他 arm 报告 catch-all arm (_) 的错误?
- vba - .copy _ 目标语法,范围错误
- excel - 名称 DYnamic Range excel 与偏移公式丢失参考
- javascript - 单击按钮后显示另一个(永久)按钮
- yii - 在yii2的where条件中使用字段作为递归函数
- javascript - 如何在 ng-options 或 ng-repeat 中使用 *ngFor="let e of employees"