【发布时间】:2022-11-24 16:33:00
【问题描述】:
我不知道在这个看似非常基本的重新编码示例中发生了什么:
library(dplyr)
df = data.frame(hcat = 1:5,
Q12 = 41:45)
df |>
mutate(Q12_test = case_when(hcat <= 3 & Q12 == 41 ~ 40,
hcat == 5 & Q12 == 42 ~ 41,
hcat == 5 & Q12 == 43 ~ 42,
TRUE ~ Q12))
这看起来像是我使用了数百次的标准 case_when 条件,但由于我不明白的原因,它出错了:
<error/dplyr:::mutate_error>
Error in `mutate()`:
! Problem while computing `Q12_test = case_when(...)`.
Caused by error in `case_when()`:
---
Backtrace:
1. dplyr::mutate(...)
6. dplyr::case_when(...)
我在这里错过了什么?
注意:我还尝试更改一些代码部分(例如,删除额外的热量条件或第三个条件),但没有任何效果。
更新:好的,罪魁祸首似乎是底部的“全部捕获”条件,即TRUE ~ Q12。如果我把它拿出来,它就会起作用。现在,问题是我怎么能把它留在里面,因为我不想将它们重新编码为 NA,而是只保留原始的 Q12 值。
更新 2:好的,下面的代码可以工作,但我真的不知道,为什么我需要将它包装成一个as.numeric:
df |>
mutate(Q12_test = case_when(hcat <= 3 & Q12 == 41 ~ 40,
hcat == 5 & Q12 == 42 ~ 41,
hcat == 5 & Q12 == 43 ~ 42,
TRUE ~ as.numeric(Q12)))
【问题讨论】: