I have a numeric vector:
a <- 1:4
# [1] 1 2 3 4
Check if values in 'a' is larger than 2:
a > 2
# [1] FALSE FALSE TRUE TRUE
However, instead of FALSE and TRUE, I want my result to be expressed as 0 and 1. Currently I am using the following method.
b <- (a > 2)
b[b == TRUE] <- 1
b[b == FALSE] <- 0
Are there any simpler methods?
There are a few ways you can go about this.
Using
ifelseThis is just a simpler way of writing exactly what you've written in the question: if the condition returns
TRUE, set the value to 1, otherwise set it to 0.Using
as.numericLogical values can be converted to their numeric equivalents easily using this function. As one might expect,
TRUEis set to 1 andFALSEto 0.The lazy version of
as.numericWhen R sees the multiplication of logical values by a numeric value, it automatically coerces the logicals to their numeric equivalents. Thus logical values can be converted lazily (from a programmer's standpoint) by multiplying by 1.