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

zynd9foi  于 2023-06-03  发布在  其他
关注(0)|答案(5)|浏览(165)

我有一个两个层次的因素在我的数据,我想转换为逻辑

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

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

rhfm7lfc

rhfm7lfc1#

在哪一点上我无法转换数据?
我认为,你在任何时候都不会转换数据,只是函数有点奇怪,无法理解数据的性质。
如果你读?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)))

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

8mmmxcuj

8mmmxcuj2#

的确,有一种直截了当的方法。
因为你有两个层次的因素,确定什么是真的和假的

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 ...
3phpmpom

3phpmpom3#

这可能有点太晚了,但我遇到了一个类似的问题,并找到了解决办法:

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

应该可以

vktxenjb

vktxenjb4#

您可以使用==创建TRUE和FALSE值:

y = factor(c(0, 1, NA))
y == "1"
# [1] FALSE  TRUE    NA
f5emj3cl

f5emj3cl5#

您可以在as.logical()中使用==运算符来标识哪个因子值是TRUE

as.logical(factor_vector == 'True value here')

相关问题