Проблема в том, что вы используете оператор присваивания <-
вместо сравнения < -
.Вам просто нужно добавить еще один пробел.Сравните две версии:
library(tidyverse)
tibble(a = seq(-10,10)) %>%
mutate(b_compare = ifelse(a < -3 , 1, 0),
b_assign = ifelse(a<-3, 1, 0))
#> # A tibble: 21 x 3
#> a b_compare b_assign
#> <int> <dbl> <dbl>
#> 1 -10 1 1
#> 2 -9 1 1
#> 3 -8 1 1
#> 4 -7 1 1
#> 5 -6 1 1
#> 6 -5 1 1
#> 7 -4 1 1
#> 8 -3 0 1
#> 9 -2 0 1
#> 10 -1 0 1
#> # … with 11 more rows
Когда вы используете оператор присваивания <-
, вы фактически делаете эквивалент ifelse(3, 1, 0)
, это странное логическое утверждение, но, к сожалению, ifelse()
невернуть ошибку и вместо этого считать ее TRUE
(проверьте действительно as.logical(3)
):
ifelse(3, 1, 0)
#> [1] 1
Если бы вы использовали вместо нее dplyr::if_else()
, она вернула бы ошибку:
dplyr::if_else(3, 1, 0)
#> Error: `condition` must be a logical vector, not a double vector