将因子转换为逻辑数据类型

use*_*755 3 r data-conversion

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

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

as.logical(df$y)用来将它们转换为逻辑的。然而,数据变成NA

summary(a)

      Mode    NA's 
    logical  500000
Run Code Online (Sandbox Code Playgroud)

在哪一点我无法转换数据?

Aks*_*elA 6

在哪一点我无法转换数据?

我认为您在任何时候都不会转换数据,它的功能有点奇怪并且无法理解数据的性质。

如果您阅读,?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)))
Run Code Online (Sandbox Code Playgroud)

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

  • 还有`y == 1`,不那么麻烦。 (3认同)
  • 哈,是真的。虽然没有告诉你为什么直接的 `as.logical()` 不起作用。 (2认同)

San*_*uez 5

确实,有一个简单的方法。

由于您有 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 ...
Run Code Online (Sandbox Code Playgroud)