替换为向量

3

我有一个包含所有辅音的向量,我想要将给定数据框中的每个辅音都替换为"C"。假设我的数据框如下所示:

   x <- c("abacate", "papel", "importante")

    v <- c("a", "e", "i", "o", "u")
    c <- c("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y",     "z")

    find    <- c
    replace <- "C"
    found   <- match(x, find)

    ifelse(is.na(found), x, replace[found])

这个好像有问题,请问有人能告诉我问题在哪里以及如何修复吗?

谢谢


尽量避免使用 c 作为变量名。它是 R 中非常重要的函数名称。 - Ricardo Saporta
2个回答

2

使用gsub函数替换字符向量中的字母:

c <- c("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y",     "z")
consonants = paste(c("[", c, "]"), collapse="")
replaced = gsub(consonants, "C", x)

consonants 变成了一个正则表达式,[bcdfghjklmnpqrstvwxyz],表示“括号内的任何字母”。

你的代码之所以不起作用,其中一个原因是 match 不会查找其他字符串中的字符串,它只会查找完全匹配的字符串。例如:

> match(c("a", "b"), "a")
[1]  1 NA
> match(c("a", "b"), "apple")
[1] NA NA

查找字符串的函数是gregexpr。通常会跟着regmatches来进行替换。但是它一次只能处理一个模式,所以你需要循环...使用gsubchartr是更好的方法。 - flodel

2

正则表达式(gsub)通常更加灵活,但是对于这个特定的问题,你也可以使用chartr函数,它会运行得更快:

old <- c("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n",
         "p", "q", "r", "s", "t", "v", "w", "x", "y", "z")
new <- rep("C", length(old))
chartr(paste(old, collapse = ""),
       paste(new, collapse = ""), x)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接