将因子转换为逻辑数据类型
Convert factor into logical datatype
我的数据中有两个级别的因子,我想将其转换为逻辑值
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
我在什么时候转换数据失败了?
At which point do I fail to convert the data?
我认为你在任何时候都无法转换数据,它的功能有点奇怪并且无法理解数据的性质。
如果您阅读 ?as.logical
,您会发现当输入为因子时,转换中会使用级别(字符)。唯一有效的字符串是 "true" 和 "false" 的所有变体,其他所有内容,包括“0”和“1”,returns 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)))
有点麻烦,我知道,但就是这样。
确实有一个简单的方法。
因为你有 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 ...
这可能有点太晚了,无法提供帮助,但我 运行 遇到了类似的问题并找到了解决方法:
as.logical(as.integer(data.frame$column))
应该可以解决问题。
我的数据中有两个级别的因子,我想将其转换为逻辑值
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
我在什么时候转换数据失败了?
At which point do I fail to convert the data?
我认为你在任何时候都无法转换数据,它的功能有点奇怪并且无法理解数据的性质。
如果您阅读 ?as.logical
,您会发现当输入为因子时,转换中会使用级别(字符)。唯一有效的字符串是 "true" 和 "false" 的所有变体,其他所有内容,包括“0”和“1”,returns 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)))
有点麻烦,我知道,但就是这样。
确实有一个简单的方法。
因为你有 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 ...
这可能有点太晚了,无法提供帮助,但我 运行 遇到了类似的问题并找到了解决方法:
as.logical(as.integer(data.frame$column))
应该可以解决问题。