如何解决R中的列表或数据集中的变异内的str_replace
我想在另一个数据集的基础上将字符添加到数据集的行中。因此,我有两个数据集,一个称为电子邮件,另一个称为域。我的问题是电子邮件数据集缺少将用户名与域名分开的@字符,因此我需要根据域数据集添加它。
这是我的两个数据集:
emails<-c("tjoeblogymail.com","simonsaysgmail.com","realpeoplehsne.com","funnythingsraveis.com") %>%
as_tibble() %>% rename(email = value)
这将导致:
# A tibble: 4 x 1
email
<chr>
1 tjoeblogymail.com
2 simonsaysgmail.com
3 realpeoplehsne.com
4 funnythingsraveis.com
域:
domains<-c("ymail.com","gmail.com","hhsne.com","raveis.com") %>%
as_tibble() %>% rename(domain = value)
这将导致:
# A tibble: 4 x 1
domain
<chr>
1 ymail.com
2 gmail.com
3 hhsne.com
4 raveis.com
我想在域之前的字符串中添加@符号。目前,我可以按以下步骤逐一进行操作:
emails %>%
mutate(email = str_replace(email,"@gmail.com"),email = str_replace(email,"ymail.com","@ymail.com"),"hsne.com","@hsne.com"),"raveis.com","@raveis.com"))
这将导致:
# A tibble: 4 x 1
email
<chr>
1 tjoeblog@ymail.com
2 simonsays@gmail.com
3 realpeople@hsne.com
4 funnythings@raveis.com
但是,我希望能够以一种不需要我将每个电子邮件地址剪切并粘贴到mutate
和str_replace
中的方式来执行此操作,而是使用{ {1}}或map
起作用,无法弄清楚该怎么做。任何建议/帮助将不胜感激。
解决方法
您可以将所有域粘贴到一个字符串中,然后使用str_replace_all
library(stringr)
str_replace_all(emails$email,str_c(domains$domain,collapse = "|"),function(m) paste0('@',m))
#[1] "tjoeblog@ymail.com" "simonsays@gmail.com" "realpeople@hsne.com"
# "funnythings@raveis.com"
从domains
数据集中的“ hhsne.com”中删除了一个额外的“ h”。
使用地图功能遍历您的域
library(tidyverse)
emails %>%
mutate(email = map_chr(domains$domain,~{str_replace(email,.x,paste0("@",.x)) %>%
str_subset(.,"@")}))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。