如何在R中以预定义的顺序将因子转换为数字

时间:2015-10-08 05:34:22

标签: r

我有一个因子列,有三个值:" b"," c"和"免费"。

我做了

 @GET
        @Produces("text/plain")
        public String hello(@Context HttpServletRequest req) {
    }

但它会转换" b"到1," c"到2和"免费"到3。

但我想转换"免费"到0," b"到2和" c"到5.我怎么能在R?

中做到这一点

非常感谢

3 个答案:

答案 0 :(得分:2)

f <- factor(c("b", "c", "c", "free", "b", "free"))

您可以尝试重命名因子级别

levels(f)[levels(f)=="b"] <- 2
levels(f)[levels(f)=="c"] <- 5
levels(f)[levels(f)=="free"] <- 0
> f
#[1] 2 5 5 0 2 0
#Levels: 2 5 0

答案 1 :(得分:1)

一种选择是再次调用'因素'并根据自定义顺序指定levelslabels参数,并在转换为'字符'后通过更改为numeric或通过levels

 df$new_col <- as.numeric(as.character(factor(df$factor_col,
               levels=c('b', 'c', 'free'), labels=c(2, 5, 0))))

另一个选项是来自recode的{​​{1}}。输出将为library(car)类。如果我们需要转换为'numeric',我们可以像之前的解决方案(factor)那样执行此操作。

as.numeric(..

数据

library(car)
df$new_col <- with(df, recode(factor_col, "'b'=2; 'c'=5; 'free'=0"))

答案 2 :(得分:0)

您可以使用以下方法创建新列:

# an example data frame
f <- data.frame(factor_col = c("b", "c", "free"))  

# create new_col    
f <- transform(f, new_col = (factor_col == "b") * 2 + (factor_col == "c") * 5)

结果(f):

  factor_col new_col
1          b       2
2          c       5
3       free       0