我有一个两个层次的因素在我的数据,我想转换为逻辑
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
as.logical(df$y)
NA
summary(a) Mode NA's logical 500000
在哪一点上我无法转换数据?
rhfm7lfc1#
在哪一点上我无法转换数据?我认为,你在任何时候都不会转换数据,只是函数有点奇怪,无法理解数据的性质。如果你读?as.logical,你会看到当输入是因子时,转换中使用的是水平(字符)。唯一有效的字符串是“true”和“false”的所有变体,其他所有字符串,包括“0”和“1”,都返回NA。然而,当0和1以数字形式给出时,它们分别被解释为FALSE和TRUE,因此所有以下工作:
?as.logical
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)))
我知道有点麻烦,但就是这样。
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 ...
3phpmpom3#
这可能有点太晚了,但我遇到了一个类似的问题,并找到了解决办法:
as.logical(as.integer(data.frame$column))
应该可以
vktxenjb4#
您可以使用==创建TRUE和FALSE值:
==
y = factor(c(0, 1, NA)) y == "1" # [1] FALSE TRUE NA
f5emj3cl5#
您可以在as.logical()中使用==运算符来标识哪个因子值是TRUE。
as.logical()
as.logical(factor_vector == 'True value here')
5条答案
按热度按时间rhfm7lfc1#
在哪一点上我无法转换数据?
我认为,你在任何时候都不会转换数据,只是函数有点奇怪,无法理解数据的性质。
如果你读
?as.logical
,你会看到当输入是因子时,转换中使用的是水平(字符)。唯一有效的字符串是“true”和“false”的所有变体,其他所有字符串,包括“0”和“1”,都返回NA。然而,当0和1以数字形式给出时,它们分别被解释为FALSE
和TRUE
,因此所有以下工作:我知道有点麻烦,但就是这样。
8mmmxcuj2#
的确,有一种直截了当的方法。
因为你有两个层次的因素,确定什么是真的和假的
3phpmpom3#
这可能有点太晚了,但我遇到了一个类似的问题,并找到了解决办法:
应该可以
vktxenjb4#
您可以使用
==
创建TRUE和FALSE值:f5emj3cl5#
您可以在
as.logical()
中使用==
运算符来标识哪个因子值是TRUE
。