Coerce logical (boolean) vector to 0 and 1

后端 未结 2 1294
予麋鹿
予麋鹿 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.

提交回复
热议问题