将factor转换为逻辑数据类型

时间:2017-07-26 14:43:48

标签: r data-conversion

我的数据中有两个级别因素,我想将其转换为逻辑

a <- str(df$y)
a
Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...

我使用as.logical(df$y)将它们转换为逻辑。但是,数据会变为NA

summary(a)

      Mode    NA's 
    logical  500000

此时我无法转换数据?

3 个答案:

答案 0 :(得分:4)

  

此时我无法转换数据?

我认为你在任何时候都无法转换数据,这是一个有点奇怪的功能,无法理解你的数据的性质。

如果您阅读?as.logical,您会看到输入是因素时,转换中会使用级别(字符)。唯一有效的字符串是“true”和“false”的所有变体,其他一切,包括“0”和“1”,返回NA。但是,当它们以数字形式给出时,0和1分别被解释为FALSETRUE,因此以下所有方法都有效:

y <- factor(c(0, 1, 1, 0))

as.logical(as.integer(levels(y)[y]))
as.logical(as.integer(y) - 1L)
as.logical(as.integer(as.character(y)))

我知道,有点麻烦,但就是这样。

答案 1 :(得分:2)

确实,有一种明智的方法。

由于您有2个级别因素,确定什么是真假

df <- data.frame(y=factor(sample(c("0","1"),10,replace = TRUE)))

str(df$y)
#  Factor w/ 2 levels "0","1": 2 2 2 1 1 2 2 2 2 2

levels(df$y) <- c(FALSE,TRUE)
df$y <- as.logical(df$y)

str(df$y)
# logi [1:10] TRUE TRUE TRUE FALSE FALSE TRUE ...

答案 2 :(得分:0)

这可能为时已晚,无法提供帮助,但是我遇到了类似的问题并找到了解决方法:

as.logical(as.integer(data.frame$column))

应该可以解决问题。