用矢量替换

时间:2013-10-06 03:22:00

标签: r replace

我有一个包含所有辅音的向量,我希望每个辅音在给定的数据帧中被替换为“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])

这不起作用。谁能告诉我问题是什么以及如何解决它?

由于

2 个答案:

答案 0 :(得分: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],表示&#34;括号内的任何字母。&#34;

您的代码无法正常工作的一个原因是match在其他字符串中找不到字符串,它只查找完全匹配。例如:

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

答案 1 :(得分: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)