替换R中的几个元素

时间:2014-07-19 04:46:40

标签: r

假设我有一个向量

dat <- c("A", "B", "C", "B", "A", "E", "E", "F", "D", "D", "A", 
         "C", "C", "E", "F", "B", "F", "E", "C", "D", "B", "A")

我将如何替换:

  • 所有“A”值变为“D”
  • 所有“B”值变为“E”
  • 所有“C”值都变为“F”。

我意识到我可以通过在R中使用匹配或哪些函数来实现这一点,但我希望在一行中完成所有这些,并且也有效。

6 个答案:

答案 0 :(得分:6)

有一个解决方案,一行。

chartr(old="ABC", new="DEF", dat)

答案 1 :(得分:1)

utf8ToInt和intToUtf8分别将字符转换为来自inters的字符。由于A,B和C到D,E和F都是三个字母,你可以通过转换为整数,添加三个,然后转换回来,如下所示:

> vUtf8ToInt <- Vectorize(utf8ToInt)
> vIntToUtf8 <- Vectorize(intToUtf8)
> 
> data <- c("A", "B", "C")
> 
> vIntToUtf8(vUtf8ToInt(data) + 3)
  A   B   C 
"D" "E" "F" 

请注意,这些函数本身不会对矢量起作用,因此必须先进行矢量化。

答案 2 :(得分:1)

dat <- substitute(expression(A, B, C, B, A, E, E, F, D, D, A, C, C, E, F, B, F, E, C, D, B, A), 
                  list(A="D", B="E", C="F") )
dat
# expression("D", "E", "F", "E", "D", E, E, F, D, D, "D", "F", 
#    "F", E, F, "E", F, E, "F", D, "E", "D")

答案 3 :(得分:0)

尝试以下方法:

> library(car)
> recode(dat, "'A'='D'; 'B'='E'; 'C' = 'F'")
[1] "D" "E" "F"

答案 4 :(得分:0)

我假设您将使用dat作为因素。所以给出了矢量

dat <- c("A", "B", "C", "B", "A", "E", "E", "F", "D", "D", "A", "C", "C", "E", "F", "B", "F", "E", "C", "D", "B", "A")

您可以使用

重新编码某个因子级别
datf<-factor(dat)
levels(datf)<-list("D"="A", "E"="B", "F"="C")

然后datf将包含

 [1] D E F E D E E F D D D F F E F E F E F D E D
Levels: D E

答案 5 :(得分:0)

你也可以:

ifelse(dat %in% c("A","B","C"), c(A="D", B="E", C="F")[dat], dat)
#[1] "D" "E" "F" "E" "D" "E" "E" "F" "D" "D" "D" "F" "F" "E" "F" "E" "F" "E" "F"
#[20] "D" "E" "D"