簡體   English   中英

str_replace 在 R 中的列表或數據集上進行變異

[英]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 地址剪切並粘貼到mutatestr_replace中的方式來執行此操作,而是使用mapapply 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM