转换数据框中列中的特定值

时间:2015-10-11 05:44:31

标签: r

我有一个由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

谢谢你们......似乎无法弄清楚谷歌的内容!

2 个答案:

答案 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" ...