Ошибка с case_when внутри функции mutate: входные данные должны быть векторными

#r #variables #dplyr #case-when

#r #переменные #dplyr #случай-когда

Вопрос:

 Error: Problem with `mutate()` input `chldwork`.
 x Input must be a vector, not a `formula` object.
   ℹ Input `chldwork` is `case_when(...)`.
    Run `rlang::last_error()` to see where the error occur
 

Я продолжаю получать эту ошибку, когда пытаюсь запустить этот код:

 d5clean <- d5clean %>% 
  mutate(chldwork = case_when(is.na(curjobr5) amp; wrmm12r5 == 0 amp; wrno12r5 == 0 amp; wrow12r5 == 0 ~ 0,
                              is.na(curjobr5) amp; wrmm12r5 == 1 amp; wrno12r5 == 0 amp; wrow12r5 == 0 ~ 1,
                              is.na(curjobr5) amp; wrmm12r5 == 1 amp; wrno12r5 == 1 amp; wrow12r5 == 0 ~ 1,
                              is.na(curjobr5) amp; wrmm12r5 == 1 amp; wrno12r5 == 1 amp; wrow12r5 == 1 ~ 1,
                              is.na(curjobr5) amp; wrmm12r5 == 0 amp; wrno12r5 == 0 amp; wrow12r5 == 1 ~ 1,
                              is.na(curjobr5) amp; wrmm12r5 == 0 amp; wrno12r5 == 1 amp; wrow12r5 == 1 ~ 1,
                              is.na(curjobr5) amp; wrmm12r5 == 0 amp; wrno12r5 == 1 amp; wrow12r5 == 0 ~ 1,
                              is.na(curjobr5) amp; wrmm12r5 == 1 amp; wrno12r5 == 0 amp; wrow12r5 == 0 ~ 1,
                              curjobr5 == 0 amp; is.na(wrmm12r5) amp; wrno12r5 == 0 amp; wrow12r5 == 0 ~ 0,
                              curjobr5 == 0 amp; is.na(wrmm12r5) amp; wrno12r5 == 1 amp; wrow12r5 == 0 ~ 1,
                              curjobr5 == 0 amp; is.na(wrmm12r5) amp; wrno12r5 == 1 amp; wrow12r5 == 1 ~ 1,
                              curjobr5 == 1 amp; is.na(wrmm12r5) amp; wrno12r5 == 0 amp; wrow12r5 == 0 ~ 1,
                              curjobr5 == 1 amp; is.na(wrmm12r5) amp; wrno12r5 == 1 amp; wrow12r5 == 0 ~ 1,
                              curjobr5 == 1 amp; is.na(wrmm12r5) amp; wrno12r5 == 1 amp; wrow12r5 == 1 ~ 1,
                              curjobr5 == 0 amp; wrmm12r5== 0 amp; is.na(wrno12r5) amp; wrow12r5 == 0 ~ 0,
                              curjobr5 == 0 amp; wrmm12r5== 0 amp; is.na(wrno12r5) amp; wrow12r5 == 1 ~ 1,
                              curjobr5 == 0 amp; wrmm12r5== 1 amp; is.na(wrno12r5) amp; wrow12r5 == 1 ~ 1,
                              curjobr5 == 1 amp; wrmm12r5== 1 amp; is.na(wrno12r5) amp; wrow12r5 == 1 ~ 1,
                              curjobr5 == 1 amp; wrmm12r5== 0 amp; is.na(wrno12r5) amp; wrow12r5 == 0 ~ 1,
                              curjobr5 == 1 amp; wrmm12r5== 0 amp; is.na(wrno12r5) amp; wrow12r5 == 0 ~ 1,
                              curjobr5 == 0 amp; wrmm12r5==0 amp; wrno12r5 == 0 amp; is.na(wrow12r5) ~ 0,
                              curjobr5 == 0 amp; wrmm12r5==0 amp; wrno12r5 == 1 amp; is.na(wrow12r5) ~ 1,
                              curjobr5 == 0 amp; wrmm12r5==1 amp; wrno12r5 == 1 amp; is.na(wrow12r5) ~ 1,
                              curjobr5 == 1 amp; wrmm12r5==1 amp; wrno12r5 == 1 amp; is.na(wrow12r5) ~ 0,
                              curjobr5 == 1 amp; wrmm12r5==0 amp; wrno12r5 == 0 amp; is.na(wrow12r5) ~ 1,
                              curjobr5 == 1 amp; wrmm12r5==1 amp; wrno12r5 == 0 amp; is.na(wrow12r5) ~ 1,
                              curjobr5 == 1 amp; wrmm12r5==1 amp; wrno12r5 == 1 amp; is.na(wrow12r5) ~ 1,
                              curjobr5 == 0 amp; wrmm12r5 == 0 amp; wrno12r5 == 0 amp; wrow12r5 == 0 ~ 0,
                              curjobr5 == 1 amp; wrmm12r5 == 0 amp; wrno12r5 == 0 amp; wrow12r5 == 0 ~ 1,
                              curjobr5 == 1 amp; wrmm12r5 == 1 amp; wrno12r5 == 0 amp; wrow12r5 ==  ~ 1,
                              curjobr5 == 1 amp; wrmm12r5 == 1 amp; wrno12r5 == 1  amp; wrow12r5 == 0 ~ 1,
                              curjobr5 == 1 amp; wrmm12r5 == 1 amp; wrno12r5 == 1 amp; wrow12r5 == 1 ~ 1,
                              curjobr5 == 0 amp; wrmm12r5 == 1 amp; wrno12r5 == 0 amp; wrow12r5 == 0 ~ 1,
                              curjobr5 == 0 amp; wrmm12r5 == 1 amp; wrno12r5 == 1 amp; wrow12r5 == 0 ~ 1,
                              curjobr5 == 0 amp; wrmm12r5 == 1 amp; wrno12r5 == 1 amp; wrow12r5 == 1 ~ 1,
                              curjobr5 == 0 amp; wrmm12r5 == 0 amp; wrno12r5 == 1 amp; wrow12r5 == 0 ~ 1,
                              curjobr5 == 0 amp; wrmm12r5 == 0 amp; wrno12r5 == 1 amp; wrow12r5 == 1 ~ 1,
                              curjobr5 == 0 amp; wrmm12r5 == 0 amp; wrno12r5 == 0 amp; wrow12r5 == 1 ~ 1,
                              TRUE ~ as.numeric(88)))
 

Я пытаюсь объединить несколько рабочих переменных в одну рабочую переменную с несколькими неслучайными пропущенными значениями. Есть какие-нибудь идеи о том, как заставить это работать?

Я смог выполнить этот код нормально:

 d4clean <- d4clean %>% 
  mutate(chldwork = case_when(curjobr4 == 0 amp; wrbf12r4 == 0 ~ 0, #condition 1
                              curjobr4 == 1 amp; wrbf12r4 == 1 ~ 1, #condition 2
                              curjobr4 == 1 amp; wrbf12r4 == 0 ~ 1, #condition 3
                              curjobr4 == 0 amp; wrbf12r4 == 1 ~ 1, #condition 4
                              is.na(curjobr4) amp; wrbf12r4 == 1 ~ 1, #condition 5
                              is.na(curjobr4) amp; wrbf12r4 == 0 ~ 0, #condition 6
                         TRUE ~ 99)) #all other cases
 

Кроме того, я не уверен, включает ли это все правильные случаи, которые мне нужно объединить. В этот момент я немного косоглазею.

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

1. Ваш код не воспроизводим. Постарайтесь свести к минимуму как можно больше кода, а затем используйте dput или reprex пакет, чтобы создать простой для понимания и воспроизводимый пример.

Ответ №1:

В одной из строк значение, подлежащее сравнению, отсутствует

 ...
curjobr5 == 1 amp; wrmm12r5 == 1 amp; wrno12r5 == 0 amp; wrow12r5 ==  ~ 1,
                                                            ^
...
 

что вызвало ошибку

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

1. Большое вам спасибо! Я чувствую, что большинство моих ошибок — это опечатки, подобные этой, но я так долго смотрел на это, что не вижу этого.

2. @shaq1993 возможно, было бы лучше использовать an IDE , который показывал бы ошибки