用一个 gsubfn() 替换包含不同数量字符的多个字符串

Replace multiple strings comprising of a different number of characters with one gsubfn()

这里说明用gsubfn()替换一条语句中一个字符at的多个字符串。例如:

x <- "doremi g-k"
gsubfn(".", list("-" = "_", " " = ""), x)
# "doremig_k"

但是我想用''替换示例中的字符串'doremi'。这不起作用:

x <- "doremi g-k"
gsubfn(".", list("-" = "_", "doremi" = ""), x)
# "doremi g_k"

我猜是因为字符串'doremi'包含多个字符,而我在gsubfn中使用元字符.。我不知道用什么来代替它 - 我必须承认我发现元字符的使用有时有点难以理解。因此,有没有办法让我一次替换'-'和'doremi'?

这对你有用吗?

gsubfn::gsubfn(pattern = "doremi|-", list("-" = "_", "doremi" = ""), x)
[1] " g_k"

关键是此搜索:"doremi|-",它指示搜索 "doremi""-"。使用 "|" 作为 or 运算符。

您可以在此处使用基本 R sub

x <- "doremi g-k"
result <- sub("doremi\s+([^-]+)-([^-]+)", "\1_\2", x)
result

[1] "g_k"

@RLave 的解决方案只是一个更通用的解决方案 -

toreplace <- list("-" = "_", "doremi" = "")
gsubfn(paste(names(toreplace),collapse="|"), toreplace, x)
[1] " g_k"