【问题标题】:dplyr - use case_when with several criteriadplyr - 使用 case_when 有几个条件
【发布时间】:2020-04-18 18:52:44
【问题描述】:

我有一个名为 data 的数据框,其中包含一个名为 Sex 的列。在进行的一项调查中,这个问题提供了两个初始选择,“男性”和“女性”以及“其他”选项,它是开放式的,人们可以随心所欲地写。

为了简单起见,我尝试将所有其他选项重新编码为 NA 并仅保留男性和女性。这是我的尝试:

data %>%
   mutate(Sex = case_when((Sex != "Male" & Sex != "Female") ~ NA))

但是,这会导致一个包含所有 NA 的列。我也尝试了以下方法,尽管我认为这没有意义:

data %>%
   mutate(Sex = case_when((Sex != "Male" | Sex != "Female") ~ NA))

结果是一样的。实现这一目标的正确方法是什么?

很遗憾,我无法发布这些数据,因为它是机密的。

【问题讨论】:

  • 提供一个小的可重现示例时,无需发布任何机密数据!

标签: r dplyr


【解决方案1】:

我们可以指定TRUE,即返回列本身的默认条件,因为默认情况下它返回NA

library(dplyr)
data %>%
   mutate(Sex = case_when(Sex != "Male" & Sex != "Female"
               ~ NA_character_, 
         TRUE ~ Sex))

或者也可以写成%in%

data %>%
    mutate(Sex = case_when(!Sex %in% c("Male", "Female") 
            ~ NA_character_, TRUE ~ Sex))

或者代替case_when。使用replace

data %>%
   mutate(Sex = replace(Sex, Sex != "Male" & Sex != "Female", NA_character_))

【讨论】:

  • 谢谢!这完美!只需在答案的第二个选项中的NA_character 之后添加_
猜你喜欢
  • 2021-09-17
  • 2021-09-20
  • 1970-01-01
  • 2022-12-03
  • 2020-09-16
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
相关资源
最近更新 更多