如何将非数字字符串转换为R中的整数

How to convert non-numeric strings into integers in R

我有一个数据框,其中一列是一个因素。 我想将该列映射为整数。 例如,在下面的示例中, 我想将 healthy 映射到值 2sick 到值 1, 和 dead 到值 0。 在这个例子中,状态的顺序很重要, 因为我希望状态 2 比状态 1 更健康, 状态 1 比状态 0 更健康。

x <- data.frame(id = c(1, 1, 2, 2),
                day = c(1, 2, 1, 2),
                state = c('healthy', 'sick', 'sick', 'dead'))
  id day   state
1  1   1 healthy
2  1   2    sick
3  2   1    sick
4  2   2    dead

操作数据框最简单的方法是什么x 为了获得以下输出数据帧?

  id day   state state_int
1  1   1 healthy         2
2  1   2    sick         1
3  2   1    sick         1
4  2   2    dead         0

您可以尝试以下方法:

> x$state_int <- as.integer(factor(x$state))
> x
  id day   state state_int
1  1   1 healthy         2
2  1   2    sick         3
3  2   1    sick         3
4  2   2    dead         1

但是,因子水平按名称排序并从 1 开始,因此数字与您的原始数字不完全匹配 post。

如果您确实需要匹配数字,可以尝试明确命名级别:

x$state_int <- as.integer(factor(x$state, levels=c('dead', 'sick', 'healthy'))) - 1

这应该适用于您要分配的任何随机映射

 x <- data.frame(id = c(1, 1, 2, 2),

                day = c(1, 2, 1, 2),
                state = c('healthy', 'sick', 'sick', 'dead'))


ids <- c(1 , 2 , 0)
names(ids) <- c('healthy' , 'sick' , 'dead') 
cbind(x , state_int = ids[as.character(x$state)])

#   id day   state      state_int
#1  1   1   healthy         1
#2  1   2    sick           2
#3  2   1    sick           2
#4  2   2    dead           0

由于因子已经存储为整数,因此这是一个简单的单行代码。如果您想要特定顺序,请使用 ordered 函数。如果顺序不重要——因为它经常是——,as.numeric(x$state) 就是你所需要的!要按特定顺序回答您的问题:

x$state_num <- as.numeric(ordered(x$state, levels = c("dead", "sick", "healthy"))) -1

  id day   state state_num
1  1   1 healthy         2
2  1   2    sick         1
3  2   1    sick         1
4  2   2    dead         0