我有一个数据框,其中一列是一个因素。
我想将该列映射为整数。
例如,在下面的例子中,
我想将n = 10
x = 1
while x < 10:
x += 1
n += n * (x - 1)
print n
映射到值healthy
,
2
到值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
答案 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