带有mutate和ifelse但将NA保留在R中的新列

问题描述 投票:1回答:1

我有一个简单的问题,但这使我很难受。

我想用ifelse函数重新编码一个变量,但我想将NA(在变量“ party”中)保留为NA。

这就是我正在做的。我有一个带有投票选择的变量(“政党”),如果参与者选择一组特定的政党,我想重新编码一个新变量(“ RRP”):

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

问题是,在“ party”变量中具有NA的参与者现在被重新编码为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))

但是它只会产生错误。

您还有其他想法吗?

非常感谢!

r if-statement dplyr tidyverse mutate
1个回答
1
投票

%in%返回FALSENA值,而不是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

数据

df <- data.frame(party = c(13:17, NA))
© www.soinside.com 2019 - 2024. All rights reserved.