3

我有一个包含所有辅音的向量,我希望在给定的数据框中将每个辅音替换为“C”。假设我的数据框是下面的 x:

   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])

这是行不通的。谁能告诉我问题是什么以及我该如何解决?

谢谢

4

2 回答 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
于 2013-10-06T03:27:16.213 回答
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)
于 2013-10-06T04:10:24.947 回答