首页 > 解决方案 > 如何确保使用 case_when 的所有选项?

问题描述

我想根据 df 数据框中的答案重新编码一个变量。如果任务花费的时间少于 30 分钟,则此变量为 1,如果超过 30 分钟,则此变量为 0。我的数据中可能存在一些随机错误。如果在我的 case_when() 函数中没有使用来自 df 数据框的所有答案,我想写出一个错误,例如:“在你的 case_when() 函数中没有使用观察‘随机错误’。任何想法如何解决这个问题?我在考虑 unique(df$col1),然后以某种方式与 case_when() 函数中使用的观察结果进行比较。但我不知道如何在 dplyr::transmute 中执行此操作...

library(dplyr)

df <- data.frame(col1 = c("<30min", "31-60min", "61-120min", ">120min", NA, "random error"))


df2 <- df %>% 
  transmute(xxx = case_when(
      col1 == "<30min" ~ 1,
      col1 == "31-60min" | col1 == "61-120min" | col1 == ">120min" ~ 0,
      TRUE ~ NA_real_)
    )
  )

df2

标签: rdplyr

解决方案


==我们可以利用而不是做多个%in%

library(dplyr)
df %>%
    transmute(xxx = case_when(col1 == "<30min" ~ 1,
                 col1 %in% c("31-60min", "61-120min", ">120min") ~ 0, 
                 TRUE ~ NA_real_))

推荐阅读