将逻辑(布尔)向量强制为 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
但是,我希望我的结果表示为 0
和 1
,而不是 FALSE
和 TRUE
。目前我正在使用以下方法。
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)
您可以通过多种方式解决此问题。
使用ifelse
b <- ifelse(a > 2, 1, 0)
这只是一种更简单的写出您在问题中所写内容的方法:如果条件 returns TRUE
,则将值设置为 1,否则将其设置为 0。
使用as.numeric
b <- as.numeric(a > 2)
使用此函数可以轻松地将逻辑值转换为其等价的数字。正如人们所料,TRUE
设置为 1,FALSE
设置为 0。
懒人版as.numeric
b <- 1*(a > 2)
当 R 看到逻辑值乘以数值时,它会自动将逻辑值强制转换为其等价的数字。因此,逻辑值可以通过乘以 1 来延迟转换(从程序员的角度来看)。
我有一个数值向量:
a <- 1:4
# [1] 1 2 3 4
检查 'a' 中的值是否大于 2:
a > 2
# [1] FALSE FALSE TRUE TRUE
但是,我希望我的结果表示为 0
和 1
,而不是 FALSE
和 TRUE
。目前我正在使用以下方法。
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)
您可以通过多种方式解决此问题。
使用
ifelse
b <- ifelse(a > 2, 1, 0)
这只是一种更简单的写出您在问题中所写内容的方法:如果条件 returns
TRUE
,则将值设置为 1,否则将其设置为 0。使用
as.numeric
b <- as.numeric(a > 2)
使用此函数可以轻松地将逻辑值转换为其等价的数字。正如人们所料,
TRUE
设置为 1,FALSE
设置为 0。懒人版
as.numeric
b <- 1*(a > 2)
当 R 看到逻辑值乘以数值时,它会自动将逻辑值强制转换为其等价的数字。因此,逻辑值可以通过乘以 1 来延迟转换(从程序员的角度来看)。