[英]str_replace within a mutate over a list or a dataset in R
我想在基於另一個數據集的數據集內的行中添加一個字符。 所以我有兩個數據集,一個稱為電子郵件,另一個稱為域。 我的問題是 email 數據集缺少將用戶名與域名分開的 @ 字符,我需要根據域數據集添加它。
這是我的兩個數據集:
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", "@gmail.com"),
email = str_replace(email, "ymail.com", "@ymail.com"),
email = str_replace(email, "hsne.com", "@hsne.com"),
email = str_replace(email, "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
但是,我希望能夠以不需要我必須將每個 email 地址剪切並粘貼到mutate
和str_replace
中的方式來執行此操作,而是使用map
或apply
function 並且無法弄清楚如何去做. 任何建議/幫助將不勝感激。
您可以將所有域粘貼到一個字符串中並使用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”。
使用 map function 遍歷您的域
library(tidyverse)
emails %>%
mutate(email = map_chr(domains$domain, ~{str_replace(email,
.x,
paste0("@", .x)) %>%
str_subset(., "@")}))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.