R,stringr - 用单个命令替换向量所有元素中的多个字符

R, stringr - replace multiple characters from all elements of a vector with a single command

首先,我是 R 和一般编程的新手,所以如果这是一个愚蠢的问题,我深表歉意。

我有一个与此类似的字符向量:

> vec <- rep(c("XabcYdef", "XghiYjkl"), each = 3)
> vec
[1] "XabcYdef" "XabcYdef" "XabcYdef" "XghiYjkl" "XghiYjkl" "XghiYjkl"

使用 stringr 包,我想删除前导 "X" 并将 "Y" 替换为“-”。

我试过下面的代码,但结果不是我所希望的。看起来 patternreplacement 参数在输入向量上被回收:

> str_replace(vec, c("X", "Y"), c("", "-"))
[1] "abcYdef"  "Xabc-def" "abcYdef"  "Xabc-def" "abcYdef"  "Xabc-def"

我调用函数2次就可以达到预期的效果:

> vec <- rep(c("XabcYdef", "XghiYjkl"), each = 3)
> vec <- str_replace(vec, "X", "")
> vec <- str_replace(vec, "Y", "-")
> vec
[1] "abc-def" "abc-def" "abc-def" "ghi-jkl" "ghi-jkl" "ghi-jkl"

有没有办法用一条命令实现同样的效果?

str_replace_all 可以用一个匹配向量来替换:

str_replace_all(vec, c("X" = "", "Y" = "-"))
[1] "abc-def" "abc-def" "abc-def" "ghi-jkl" "ghi-jkl" "ghi-jkl"