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

时间:2015-05-29 03:53:29

标签: r associative-array

我有一个数据框,其中一列是一个因素。 我想将该列映射为整数。 例如,在下面的例子中, 我想将n = 10 x = 1 while x < 10: x += 1 n += n * (x - 1) print n 映射到值healthy2到值sick, 和1到值dead。 在这个例子中,状态的顺序很重要, 因为我希望州2比州1更健康, 并且状态1比状态0更健康。

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

3 个答案:

答案 0 :(得分:3)

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

 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

答案 1 :(得分:2)

您可以尝试以下操作:

> 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开始,因此数字与原始帖子不完全匹配。

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

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

答案 2 :(得分:2)

因为因子已经存储为整数,所以这是一个简单的oneliner。如果您想要某个订单,请使用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