我有一个由1列组成的数据框,名为'x',有35行字母A,B,C,D,E。我想创建另一个列,其中值为'B'的所有x行将更改为'Q',值'C'将更改为'Z',所有其他值保持不变。或者,这些更改可能发生在原始列x本身内。我可以写一个函数,循环或应用函数,但我认为R有更简单的事情要做。这是数据:
set.seed(1)
x<-sample(LETTERS[1:5],35,replace=TRUE)
z<-data.frame(x)
z
谢谢你们......似乎无法弄清楚谷歌的内容!
答案 0 :(得分:0)
我们可以使用recode
library(car)
z$x
#[1] B B C E B E E D D A B A D B D C D E B D E B D A B B A B E B C C C A E
#Levels: A B C D E
library(car)
z$new <- recode(z$x, "'B'='Q';'C'='Z'")
z$new
#[1] Q Q Z E Q E E D D A Q A D Q D Z D E Q D E Q D A Q Q A Q E Q Z Z Z A E
#Levels: A D E Q Z
如果我们需要character
输出,可以指定
recode(z$x, "'B'='Q';'C'='Z'", as.factor.result=FALSE)
此外,如果我们不需要对订单进行排序,则会出现levels
个参数
recode(z$x, "'B'='Q';'C'='Z'", levels=c('A', 'Q', 'Z', 'D', 'E'))
答案 1 :(得分:0)
使用chartr
(字符翻译)功能非常简单:
z$new <- chartr("BC", "QZ", z$x)
你可能会注意到原件是一个“factor”变量而新列变成了字符“。
> str(z)
'data.frame': 35 obs. of 2 variables:
$ x : Factor w/ 5 levels "A","B","C","D",..: 2 2 3 5 2 5 5 4 4 1 ...
$ new: chr "Q" "Q" "Z" "E" ...