【问题标题】:New column with mutate and ifelse but keep NAs in R带有 mutate 和 ifelse 的新列,但在 R 中保留 NA
【发布时间】:2020-04-24 09:16:31
【问题描述】:

我有一个简单的问题,但这让我很为难。

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

这就是我正在做的。我有一个带有投票选择的变量(“party”),如果参与者选择一组特定的政党,我想重新编码一个新变量(“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 tidyverse dplyr


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-03
      • 2013-07-07
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      相关资源
      最近更新 更多