将逻辑(布尔)向量强制为 0 和 1

Coerce logical (boolean) vector to 0 and 1

我有一个数值向量:

a <- 1:4
# [1] 1 2 3 4

检查 'a' 中的值是否大于 2:

a > 2
# [1] FALSE FALSE  TRUE  TRUE

但是,我希望我的结果表示为 01,而不是 FALSETRUE。目前我正在使用以下方法。

b <- (a > 2)
b[b == TRUE] <- 1
b[b == FALSE] <- 0

有没有更简单的方法?

r 编码逻辑数据的方式,您的向量 b <- a > 2 已经是 (0,0,1,1) - r 将 "TRUE" 值存储为 1,将 "FALSE" 值存储为 0 .您甚至可以使用 mean(b),它会 return .5。但是,如果您更喜欢可视化数字而不是逻辑值,您总是可以只做 b <- as.numeric(b),或者将它们全部放在一行代码中 b <- as.numeric(a > 2)

您可以通过多种方式解决此问题。

  1. 使用ifelse

    b <- ifelse(a > 2, 1, 0)
    

    这只是一种更简单的写出您在问题中所写内容的方法:如果条件 returns TRUE,则将值设置为 1,否则将其设置为 0。

  2. 使用as.numeric

    b <- as.numeric(a > 2)
    

    使用此函数可以轻松地将逻辑值转换为其等价的数字。正如人们所料,TRUE 设置为 1,FALSE 设置为 0。

  3. 懒人版as.numeric

    b <- 1*(a > 2)
    

    当 R 看到逻辑值乘以数值时,它会自动将逻辑值强制转换为其等价的数字。因此,逻辑值可以通过乘以 1 来延迟转换(从程序员的角度来看)。