将因子转换为原始数值

时间:2015-12-16 21:45:14

标签: r

我不知道为什么我在努力解决这个问题,因为似乎有很多SO答案可以解决这个问题。但我在这里。

我将1和0的向量转换为因子,并将值标记为“是”和“否”。

fact <- factor(c(1,1,0,1,0,1),
               levels=c(1,0),
               labels=c("yes", "no"))
#[1] yes yes no  yes no  yes
#Levels: yes no

有关将因子转换回数值的问题的答案建议as.numeric(as.character(x))as.numeric(levels(x)[x]

as.numeric(as.character(fact))
#[1] NA NA NA NA NA NA

as.numeric(levels(fact))[fact]
#[1] NA NA NA NA NA NA

2 个答案:

答案 0 :(得分:2)

fact <- factor(c(1,1,0,1,0,1),
               levels=c(1,0),
               labels=c("yes", "no"))
fact
# [1] yes yes no  yes no  yes
# Levels: yes no
levels(fact)
# [1] "yes" "no" 

现在,fact的级别是一个字符向量。 as.numeric(as.character(fact))无法完成这项工作。

c(1, 0)[fact]
# [1] 1 1 0 1 0 1

<强>更新

unclass(fact)
# [1] 1 1 2 1 2 1
# attr(,"levels")
# [1] "yes" "no" 
mode(fact)
# [1] "numeric"

答案 1 :(得分:0)

最简单的解决方案是更改指定调用因子的方式,使其可以使用任意数量的数字级别。

fact <- factor(c(1,1,0,1,0,1, 2),
               levels=c(0,1, 2),
               labels=c("no", "yes", "maybe"))
as.numeric(fact) - 1