Неожиданное поведение с case_when и is.na - PullRequest
0 голосов
/ 08 мая 2019

Я хочу изменить все значения NA в столбце на 0, а все остальные значения на 1. Однако я не могу заставить работать комбинацию case_when и is.na.

# Create dataframe
a <- c(rep(NA,9), 2, rep(NA, 10))
b <- c(rep(NA,9), "test", rep(NA, 10))
df <- data.frame(a,b, stringsAsFactors = F)

# Create new column (c), where all NA values in (a) are transformed to 0 and other values are transformed to 1
df <- df %>% 
  mutate(
    c = case_when(
      a == is.na(.$a) ~ 0,
      FALSE ~ 1
    )
  )

Я ожидаю, что в столбце (c) будут указаны все 0 значений и одно значение 1, но все 0.

Это работает, когда я использую оператор if_else с is.na, например:

df <- df %>% 
  mutate(
    c = if_else(is.na(a), 0, 1))
  )

Что здесь происходит?

1 Ответ

2 голосов
/ 08 мая 2019

Вы должны сделать это вместо:

df %>% 
    mutate(
        c = case_when(
            is.na(a) ~ 0,
            TRUE ~ 1
        )
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...