Новый столбец с мутированием и ifelse, но с сохранением NA в R - PullRequest
1 голос
/ 24 апреля 2020

У меня простой вопрос, но он доставляет мне трудные времена.

Я хочу sh перекодировать переменную с помощью функции ifelse, но я хочу оставить NA (в переменной "party" ) как НС.

Это то, что я делаю. У меня есть переменная с выбором голоса ("party"), и я хочу перекодировать новую переменную ("RRP"), если участники выбирают конкретный c набор партий:

df<- df %>%
  mutate(RRP = if_else(party %in% c("4",#SPP/UDC
                                    "12",#Swiss Democrats
                                    "13",#FDU
                                    "14", #PSL
                                    "15"), 1, 0))

Проблема в том, что участники, которые имеют NA в переменной "party", теперь перекодируются как 0, потому что они не выполняют условие в ifelse.

Я также пробовал это:

df<- df %>%
  mutate(RRP = if_else(party %in% c("4",#SPP/UDC
                                    "12",#Swiss Democrats
                                    "13",#FDU
                                    "14", #PSL
                                    "15"), 1, 0,  na.rm=TRUE))

, но это просто выдает ошибку.

У вас есть другие идеи?

Большое спасибо!

1 Ответ

1 голос
/ 24 апреля 2020

%in% возвращает FALSE для значения NA, а не NA. Поэтому, когда он используется в ifelse / if_else, он выполняет в них условие FALSE. Мы можем использовать case_when здесь:

library(dplyr)

df %>%
  mutate(RRP = case_when(party %in% c(4, 12:15) ~ 1, 
                         is.na(party) ~ NA_real_, 
                          TRUE ~ 0))
#  party RRP
#1    13   1
#2    14   1
#3    15   1
#4    16   0
#5    17   0
#6    NA  NA

data

df <- data.frame(party = c(13:17, NA))
...