将因子级别更改为数值:

时间:2015-06-08 11:22:29

标签: r

我有一个包含三个级别的向量,分别是" M"," S"和"未知"

我想将它们更改为数字(整数)值,如下所示:

  1. 如果" M"然后值2(整数)

  2. 如果" S"然后值1(整数)

  3. 如果"未知"然后是0(整数)

  4. 我尝试了什么

    我打算像这样一个一个地改变它们:

    cards$MaritalStatus[cards$MartialStatus == "M"] <- 2
    

    然而,我有例外:

    Warning message:
    In `[<-.factor`(`*tmp*`, cards$MartialStatus == "M", value = c(1L,  :
      invalid factor level, NA generated
    

    请帮忙吗?

4 个答案:

答案 0 :(得分:4)

我会使用match执行此操作:

match(cards$MaritalStatus, c("unknown", "S", "M")) - 1

答案 1 :(得分:2)

尝试

v1 <- factor(c("M","S","unknown","M","S"))
keyval <- setNames(0:2, c('unknown', 'S', 'M'))
as.numeric(keyval[as.character(v1)])
#[1] 2 1 0 2 1

或者

as.numeric(as.character(factor(v1, levels=c('M', 'S', 'unknown'),
           labels=c(2,1,0)) ))
#[1] 2 1 0 2 1

答案 2 :(得分:1)

如果您的值超过3,我不会采用这种方法,但在这种情况下,您可以使用嵌套的ifelse语句,如下所示:

ifelse(cards$MaritalStatus=="unknown", 0, ifelse(cards$MaritalStatus=="M", 2, 1))

答案 3 :(得分:0)

这是一种更通用的方法(也许更容易理解):

1st - 声明值以及它们应该更改为什么。

namesList <- list(M=2, A=1, unknown=0)

第二 - 应用更改

unlist(namesList[as.character(cards$MaritalStatus)])