как убедиться, что используются все параметры для case_when?

#r #dplyr

#r #dplyr

Вопрос:

Я хотел бы перекодировать переменную в соответствии с ответами во фрейме данных df. Эта переменная равна 1, если задача занимает менее 30 минут, и равна 0, если дольше 30 минут. Существует вероятность того, что в моих данных есть какие-то случайные ошибки. В случае, если не все ответы из фрейма данных df используются в моей функции case_when(), я хотел бы выписать ошибку типа: «наблюдение «случайная ошибка» не использовалось в вашей функции 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
  

Ответ №1:

Вместо того, чтобы делать mutiple == , мы можем использовать %in%

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

Комментарии:

1. хороший момент, не отвечает на мой вопрос, но спасибо 🙂

2. @titeuf можете ли вы обновить свой пост с ожидаемым результатом. Спасибо