使用 case_when 时如何解决此错误?
How can I solve this error when using case_when?
我正在使用此代码:
ovabonnement <- ovabonnement %>%
mutate(c12_ovabonnement_type_con_voor = case_when(s2_ovabonnement_type_voor_anders == 1 ~ NA,
s2_ovabonnement_type_voor_1 == 1 |
s2_ovabonnement_type_voor_13 == 1 ~ "Basis",
s2_ovabonnement_type_voor_2 == 1 |
s2_ovabonnement_type_voor_3 == 1 |
s2_ovabonnement_type_voor_4 == 1 |
s2_ovabonnement_type_voor_9 == 1 |
s2_ovabonnement_type_voor_11 == 1 ~ "Voordeel",
s2_ovabonnement_type_voor_5 == 1 |
s2_ovabonnement_type_voor_6 == 1 |
s2_ovabonnement_type_voor_7 == 1 |
s2_ovabonnement_type_voor_8 == 1 |
s2_ovabonnement_type_voor_10 == 1 |
s2_ovabonnement_type_voor_12 == 1 |
s2_ovabonnement_type_voor_14 == 1 ~ "Vrij"))
所以我有这 15 个变量来表示一个人是否已将订阅添加到他们的 public 交通会员资格中。因为这是一个多项选择问卷,人们可以 select 多项选择,这就是为什么它们是不同的变量。
我想把这些变成一个变量,如果人们回答“其他”,则取 NA,如果人们回答 1 或 13,则取“基础”,如果人们回答 2、3、4、9 或 11,则取“Voordeel”,以及“ Vrij" 如果人们回答 5、6、7、8、10、12 或 14。
如果人们回答 2,s2_ovabonnement_type_voor_2 中就会有一个 1。人们可能已经回答了其中的多个问题,这使得它有点棘手。但是,我希望它按时间顺序进行。例如,如果一个人回答 2 AND 10,它应该选择 10,因为代码在后面,但我不确定 case_when 是否是这样工作的。
我收到这个错误:
Error in `mutate()`:
! Problem while computing `c12_ovabonnement_type_con_voor = case_when(...)`.
Caused by error in `names(message) <- `*vtmp*``:
! 'names' attribute [1] must be the same length as the vector [0]
Run `rlang::last_error()` to see where the error occurred.
case_when/if_else
是类型敏感的,即所有表达式都应该 return 相同的类型。在 OP 的表达式中,第一个表达式 returns NA
和 NA 默认为 logical
,其他所有 return character
类型。我们需要NA_character_
来匹配others
的类型
ovabonnement <- ovabonnement %>%
mutate(c12_ovabonnement_type_con_voor = case_when(s2_ovabonnement_type_voor_anders == 1 ~ NA_character_,
s2_ovabonnement_type_voor_1 == 1 |
s2_ovabonnement_type_voor_13 == 1 ~ "Basis",
s2_ovabonnement_type_voor_2 == 1 |
s2_ovabonnement_type_voor_3 == 1 |
s2_ovabonnement_type_voor_4 == 1 |
s2_ovabonnement_type_voor_9 == 1 |
s2_ovabonnement_type_voor_11 == 1 ~ "Voordeel",
s2_ovabonnement_type_voor_5 == 1 |
s2_ovabonnement_type_voor_6 == 1 |
s2_ovabonnement_type_voor_7 == 1 |
s2_ovabonnement_type_voor_8 == 1 |
s2_ovabonnement_type_voor_10 == 1 |
s2_ovabonnement_type_voor_12 == 1 |
s2_ovabonnement_type_voor_14 == 1 ~ "Vrij"))
我正在使用此代码:
ovabonnement <- ovabonnement %>%
mutate(c12_ovabonnement_type_con_voor = case_when(s2_ovabonnement_type_voor_anders == 1 ~ NA,
s2_ovabonnement_type_voor_1 == 1 |
s2_ovabonnement_type_voor_13 == 1 ~ "Basis",
s2_ovabonnement_type_voor_2 == 1 |
s2_ovabonnement_type_voor_3 == 1 |
s2_ovabonnement_type_voor_4 == 1 |
s2_ovabonnement_type_voor_9 == 1 |
s2_ovabonnement_type_voor_11 == 1 ~ "Voordeel",
s2_ovabonnement_type_voor_5 == 1 |
s2_ovabonnement_type_voor_6 == 1 |
s2_ovabonnement_type_voor_7 == 1 |
s2_ovabonnement_type_voor_8 == 1 |
s2_ovabonnement_type_voor_10 == 1 |
s2_ovabonnement_type_voor_12 == 1 |
s2_ovabonnement_type_voor_14 == 1 ~ "Vrij"))
所以我有这 15 个变量来表示一个人是否已将订阅添加到他们的 public 交通会员资格中。因为这是一个多项选择问卷,人们可以 select 多项选择,这就是为什么它们是不同的变量。
我想把这些变成一个变量,如果人们回答“其他”,则取 NA,如果人们回答 1 或 13,则取“基础”,如果人们回答 2、3、4、9 或 11,则取“Voordeel”,以及“ Vrij" 如果人们回答 5、6、7、8、10、12 或 14。
如果人们回答 2,s2_ovabonnement_type_voor_2 中就会有一个 1。人们可能已经回答了其中的多个问题,这使得它有点棘手。但是,我希望它按时间顺序进行。例如,如果一个人回答 2 AND 10,它应该选择 10,因为代码在后面,但我不确定 case_when 是否是这样工作的。
我收到这个错误:
Error in `mutate()`:
! Problem while computing `c12_ovabonnement_type_con_voor = case_when(...)`.
Caused by error in `names(message) <- `*vtmp*``:
! 'names' attribute [1] must be the same length as the vector [0]
Run `rlang::last_error()` to see where the error occurred.
case_when/if_else
是类型敏感的,即所有表达式都应该 return 相同的类型。在 OP 的表达式中,第一个表达式 returns NA
和 NA 默认为 logical
,其他所有 return character
类型。我们需要NA_character_
来匹配others
ovabonnement <- ovabonnement %>%
mutate(c12_ovabonnement_type_con_voor = case_when(s2_ovabonnement_type_voor_anders == 1 ~ NA_character_,
s2_ovabonnement_type_voor_1 == 1 |
s2_ovabonnement_type_voor_13 == 1 ~ "Basis",
s2_ovabonnement_type_voor_2 == 1 |
s2_ovabonnement_type_voor_3 == 1 |
s2_ovabonnement_type_voor_4 == 1 |
s2_ovabonnement_type_voor_9 == 1 |
s2_ovabonnement_type_voor_11 == 1 ~ "Voordeel",
s2_ovabonnement_type_voor_5 == 1 |
s2_ovabonnement_type_voor_6 == 1 |
s2_ovabonnement_type_voor_7 == 1 |
s2_ovabonnement_type_voor_8 == 1 |
s2_ovabonnement_type_voor_10 == 1 |
s2_ovabonnement_type_voor_12 == 1 |
s2_ovabonnement_type_voor_14 == 1 ~ "Vrij"))