【问题标题】:Error with case_when within mutate function: input must be vectorcase_when 在 mutate 函数中出错:输入必须是向量
【发布时间】:2021-03-22 03:37:21
【问题描述】:
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) & wrmm12r5 == 0 & wrno12r5 == 0 & wrow12r5 == 0 ~ 0,
                              is.na(curjobr5) & wrmm12r5 == 1 & wrno12r5 == 0 & wrow12r5 == 0 ~ 1,
                              is.na(curjobr5) & wrmm12r5 == 1 & wrno12r5 == 1 & wrow12r5 == 0 ~ 1,
                              is.na(curjobr5) & wrmm12r5 == 1 & wrno12r5 == 1 & wrow12r5 == 1 ~ 1,
                              is.na(curjobr5) & wrmm12r5 == 0 & wrno12r5 == 0 & wrow12r5 == 1 ~ 1,
                              is.na(curjobr5) & wrmm12r5 == 0 & wrno12r5 == 1 & wrow12r5 == 1 ~ 1,
                              is.na(curjobr5) & wrmm12r5 == 0 & wrno12r5 == 1 & wrow12r5 == 0 ~ 1,
                              is.na(curjobr5) & wrmm12r5 == 1 & wrno12r5 == 0 & wrow12r5 == 0 ~ 1,
                              curjobr5 == 0 & is.na(wrmm12r5) & wrno12r5 == 0 & wrow12r5 == 0 ~ 0,
                              curjobr5 == 0 & is.na(wrmm12r5) & wrno12r5 == 1 & wrow12r5 == 0 ~ 1,
                              curjobr5 == 0 & is.na(wrmm12r5) & wrno12r5 == 1 & wrow12r5 == 1 ~ 1,
                              curjobr5 == 1 & is.na(wrmm12r5) & wrno12r5 == 0 & wrow12r5 == 0 ~ 1,
                              curjobr5 == 1 & is.na(wrmm12r5) & wrno12r5 == 1 & wrow12r5 == 0 ~ 1,
                              curjobr5 == 1 & is.na(wrmm12r5) & wrno12r5 == 1 & wrow12r5 == 1 ~ 1,
                              curjobr5 == 0 & wrmm12r5== 0 & is.na(wrno12r5) & wrow12r5 == 0 ~ 0,
                              curjobr5 == 0 & wrmm12r5== 0 & is.na(wrno12r5) & wrow12r5 == 1 ~ 1,
                              curjobr5 == 0 & wrmm12r5== 1 & is.na(wrno12r5) & wrow12r5 == 1 ~ 1,
                              curjobr5 == 1 & wrmm12r5== 1 & is.na(wrno12r5) & wrow12r5 == 1 ~ 1,
                              curjobr5 == 1 & wrmm12r5== 0 & is.na(wrno12r5) & wrow12r5 == 0 ~ 1,
                              curjobr5 == 1 & wrmm12r5== 0 & is.na(wrno12r5) & wrow12r5 == 0 ~ 1,
                              curjobr5 == 0 & wrmm12r5==0 & wrno12r5 == 0 & is.na(wrow12r5) ~ 0,
                              curjobr5 == 0 & wrmm12r5==0 & wrno12r5 == 1 & is.na(wrow12r5) ~ 1,
                              curjobr5 == 0 & wrmm12r5==1 & wrno12r5 == 1 & is.na(wrow12r5) ~ 1,
                              curjobr5 == 1 & wrmm12r5==1 & wrno12r5 == 1 & is.na(wrow12r5) ~ 0,
                              curjobr5 == 1 & wrmm12r5==0 & wrno12r5 == 0 & is.na(wrow12r5) ~ 1,
                              curjobr5 == 1 & wrmm12r5==1 & wrno12r5 == 0 & is.na(wrow12r5) ~ 1,
                              curjobr5 == 1 & wrmm12r5==1 & wrno12r5 == 1 & is.na(wrow12r5) ~ 1,
                              curjobr5 == 0 & wrmm12r5 == 0 & wrno12r5 == 0 & wrow12r5 == 0 ~ 0,
                              curjobr5 == 1 & wrmm12r5 == 0 & wrno12r5 == 0 & wrow12r5 == 0 ~ 1,
                              curjobr5 == 1 & wrmm12r5 == 1 & wrno12r5 == 0 & wrow12r5 ==  ~ 1,
                              curjobr5 == 1 & wrmm12r5 == 1 & wrno12r5 == 1  & wrow12r5 == 0 ~ 1,
                              curjobr5 == 1 & wrmm12r5 == 1 & wrno12r5 == 1 & wrow12r5 == 1 ~ 1,
                              curjobr5 == 0 & wrmm12r5 == 1 & wrno12r5 == 0 & wrow12r5 == 0 ~ 1,
                              curjobr5 == 0 & wrmm12r5 == 1 & wrno12r5 == 1 & wrow12r5 == 0 ~ 1,
                              curjobr5 == 0 & wrmm12r5 == 1 & wrno12r5 == 1 & wrow12r5 == 1 ~ 1,
                              curjobr5 == 0 & wrmm12r5 == 0 & wrno12r5 == 1 & wrow12r5 == 0 ~ 1,
                              curjobr5 == 0 & wrmm12r5 == 0 & wrno12r5 == 1 & wrow12r5 == 1 ~ 1,
                              curjobr5 == 0 & wrmm12r5 == 0 & wrno12r5 == 0 & wrow12r5 == 1 ~ 1,
                              TRUE ~ as.numeric(88)))

我正在尝试将多个工作变量组合成一个具有多个非随机缺失值的工作变量。关于如何使其工作的任何想法?

我能够很好地运行这段代码:

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

另外,我不确定这是否包括我需要合并的所有正确案例。在这一点上我会有点斗鸡眼。

【问题讨论】:

  • 您的代码不可重现。尽量减少代码,然后使用dputreprex 包生成一个易于理解、可重复的示例。

标签: r variables dplyr case-when


【解决方案1】:

其中一行中缺少要比较的值

...
curjobr5 == 1 & wrmm12r5 == 1 & wrno12r5 == 0 & wrow12r5 ==  ~ 1,
                                                            ^
...

导致错误的原因

【讨论】:

  • 非常感谢!我觉得我的大部分错误都是这样的错字,但我一直盯着它看太久了,我看不到它。
  • @shaq1993 最好使用IDE 来显示错误
猜你喜欢
  • 2023-01-04
  • 2020-09-18
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
  • 2020-03-29
相关资源
最近更新 更多