Coerce logical (boolean) vector to 0 and 1

后端 未结 2 1271
予麋鹿
予麋鹿 2021-01-16 17:32

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         


        
相关标签:
2条回答
  • 2021-01-16 18:02

    There are a few ways you can go about this.

    1. Using ifelse

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

      This 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.

    2. Using as.numeric

      b <- as.numeric(a > 2)
      

      Logical values can be converted to their numeric equivalents easily using this function. As one might expect, TRUE is set to 1 and FALSE to 0.

    3. The lazy version of as.numeric

      b <- 1*(a > 2)
      

      When 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.

    0 讨论(0)
  • 2021-01-16 18:11

    The way r codes logical data, your vector b <- a > 2 is already (0,0,1,1) - r stores "TRUE" values as 1's and "FALSE" values as 0's. You could even take mean(b) and it would return .5. If you'd prefer to visualize numbers instead of logical values however, you could always just do b <- as.numeric(b), or to put it all in one line of code b <- as.numeric(a > 2)

    0 讨论(0)
提交回复
热议问题