假设我有一个向量
dat <- c("A", "B", "C", "B", "A", "E", "E", "F", "D", "D", "A",
"C", "C", "E", "F", "B", "F", "E", "C", "D", "B", "A")
我将如何替换:
我意识到我可以通过在R中使用匹配或哪些函数来实现这一点,但我希望在一行中完成所有这些,并且也有效。
答案 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"