基于R中的电子邮件地址创建公司ID列(首选dplyr答案)

基于R中的电子邮件地址创建公司ID列(首选dplyr答案),r,methods,statistics,R,Methods,Statistics,我还没有解决这一部分,但我想我会把它扔到这里,看看是否能在明天尝试之前得到一些提示。我有一个不同地址的电子邮件列表:john@ketchup.com, cindy@mustard.com, bob@relish.com. 我想创建一个列,为每个新公司名称分配一个ID。例如,如果@ketchup,company ID=1,如果@芥末网,company ID=2等等 我可以使用dplyrs mutate函数吗?我想这个命令是从电子邮件开始的,然后根据电子邮件创建一个新的专栏我能想到的这个解决方案的唯

我还没有解决这一部分,但我想我会把它扔到这里,看看是否能在明天尝试之前得到一些提示。我有一个不同地址的电子邮件列表:john@ketchup.com, cindy@mustard.com, bob@relish.com. 我想创建一个列,为每个新公司名称分配一个ID。例如,如果@ketchup,company ID=1,如果@芥末网,company ID=2等等

我可以使用dplyrs mutate函数吗?我想这个命令是从电子邮件开始的,然后根据电子邮件创建一个新的专栏我能想到的这个解决方案的唯一缺点是,如果电子邮件列表更大,谢天谢地,我可以手动完成,你必须为每封电子邮件分配一个ID,这可能会变得很麻烦


无论如何,答案是感激的

我们可以提取@后面的子字符串,并使用match创建一个新的'ID'列

library(dplyr)
library(tidyr)
df1 %>%
    separate(email, into = c('prefix', 'suffix'), sep= "@", remove = FALSE) %>%
    mutate(ID = match(suffix, unique(suffix)) %>%
    select(-prefix, -suffix)

我们可以提取@后面的子字符串,并使用match创建一个新的'ID'列

library(dplyr)
library(tidyr)
df1 %>%
    separate(email, into = c('prefix', 'suffix'), sep= "@", remove = FALSE) %>%
    mutate(ID = match(suffix, unique(suffix)) %>%
    select(-prefix, -suffix)

感谢@akrun给出最初的答案,但我无法按帖子的方式运行它。我对它进行了一些修改,现在它可以工作了-它现在为每个唯一的后缀匹配分配一个唯一的ID,并分配递增的数字:


librarydplyr librarytidyr df1%>% separateemail,into=c'前缀','后缀',sep=@,remove=FALSE%>% mutateID=匹配后缀,唯一后缀%>% 选择前缀,-后缀


感谢@akrun给出最初的答案,但我无法按帖子的方式运行它。我对它进行了一些修改,现在它可以工作了-它现在为每个唯一的后缀匹配分配一个唯一的ID,并分配递增的数字:


librarydplyr librarytidyr df1%>% separateemail,into=c'前缀','后缀',sep=@,remove=FALSE%>% mutateID=匹配后缀,唯一后缀%>% 选择前缀,-后缀


谢谢@akrun!我理解代码直到mutateID=matchsuffix,uniquesuffix。那么这个命令指定创建一个名为ID的新变量,并将每个后缀与唯一的后缀进行比较?当我运行这个命令时,我不会得到一个单独的填充列。那么selec-prefix-suffix只是为了从数据帧中删除这些,对吗?谢谢澄清@D500前缀/后缀列在@处拆分,然后根据后缀`创建ID并删除这些列。另一种选择是只获取带有str_extract的sufix部件,即mutatesuffix=str_extractemail、%librarydplyr librarytidyr df1%>%separateemail,放入=c'prefix',suffix',sep=@,remove=FALSE%>%mutateID=matchsuffix,uniquesuffix%>%select prefix,-suffix,原始代码仅在所有电子邮件后缀上生成id=1。它不是应该为匹配的唯一后缀创建一个新ID吗?例如:g@companyx = 1, g@company = 2, g@companyz= 3? 代码对你有用吗?@D500你有类似字符串的代码吗g@companyx=1我假设字符串是g@compnayxThanks@akrun!我理解代码直到mutateID=matchsuffix,uniquesuffix。那么这个命令指定创建一个名为ID的新变量,并将每个后缀与唯一的后缀进行比较?当我运行这个命令时,我不会得到一个单独的填充列。那么selec-prefix-suffix只是为了从数据帧中删除这些,对吗?谢谢澄清@D500前缀/后缀列在@处拆分,然后根据后缀`创建ID并删除这些列。另一种选择是只获取带有str_extract的sufix部件,即mutatesuffix=str_extractemail、%librarydplyr librarytidyr df1%>%separateemail,放入=c'prefix',suffix',sep=@,remove=FALSE%>%mutateID=matchsuffix,uniquesuffix%>%select prefix,-suffix,原始代码仅在所有电子邮件后缀上生成id=1。它不是应该为匹配的唯一后缀创建一个新ID吗?例如:g@companyx = 1, g@company = 2, g@companyz= 3? 代码对你有用吗?@D500你有类似字符串的代码吗g@companyx=1我假设字符串是g@compnayx