我试图用几个匹配表达式替换字符串的部分。我已经找到了如何在特定的列上应用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
语句是如何使用的。下面的工作很好。另外,如果mutate
被plyr::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