r语言 - 使用多个选项匹配字符串替换字符



我试图用几个匹配表达式替换字符串的部分。我已经找到了如何在特定的列上应用str_replace_all。但我不知道如何将其应用于dplyr管道的数据框架内?

虚拟的例子:

d <- data.frame(nam = c('aaa_string', 'bb_salala', 'cc_bububub'))
# applied on the d$nam vector every thing is working
d$nam %>% 
str_replace_all(c("aaa" = "1", "bb" = "2", "cc" = "33"))

mutate中使用相同的语句,它突然不起作用,声称str_replace_all中的argument "pattern" is missing。如何解决这个问题?

预期输出:

nam
"1_string"   
"2_salala"   
"33_bububub"

不清楚mutate语句是如何使用的。下面的工作很好。另外,如果mutateplyr::mutate屏蔽,则指定dplyr::mutate

library(dplyr)
library(stringr)
d <- d %>%
dplyr::mutate(nam = str_replace_all(nam, 
c("aaa" = "1", "bb" = "2", "cc" = "33")))

与产出

nam
1   1_string
2   2_salala
3 33_bububub

这是另一种方法:

library(dplyr)
library(tidyr)
d %>% 
separate(nam, c("a", "b")) %>% 
mutate(a = case_when(a == "aaa" ~ "1",
a == "bb" ~ "2",
a == "cc" ~ "33", 
TRUE ~ NA_character_)) %>% 
mutate(nam = paste(a,b, sep = "_"), .keep="unused")
nam
1   1_string
2   2_salala
3 33_bububub