我有一个包含所有辅音的向量,我希望每个辅音在给定的数据帧中被替换为“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])
这不起作用。谁能告诉我问题是什么以及如何解决它?
由于
答案 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)