我的数据中有两个级别因素,我想将其转换为逻辑
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
此时我无法转换数据?
答案 0 :(得分:4)
此时我无法转换数据?
我认为你在任何时候都无法转换数据,这是一个有点奇怪的功能,无法理解你的数据的性质。
如果您阅读?as.logical
,您会看到输入是因素时,转换中会使用级别(字符)。唯一有效的字符串是“true”和“false”的所有变体,其他一切,包括“0”和“1”,返回NA。但是,当它们以数字形式给出时,0和1分别被解释为FALSE
和TRUE
,因此以下所有方法都有效:
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))
应该可以解决问题。