r - 为什么 dplyr case_when 不能正常工作?
问题描述
我正在处理一个数据框,我想根据值有条件地生成一个新变量,但是那些大于 1 的值应该说“Sin sentido”,但是,事实并非如此,它仍然显示为“En desarrollo” , 有谁知道为什么会这样?我的代码语法有错误吗?希望你能帮助我代码如下:
ejercicio <- data.frame(
dato1 = c(0,0.1,0.5,1,1.1)
)
ejercicio <- ejercicio |>
mutate(Estatus = case_when(
dato1 == 1 ~ "Completado",
dato1 == 0 ~ "Sin empezar",
dato1 > 0 | dato1 < 1 ~ "En desarrollo",
dato1 > 1 ~ "Sin sentido"
))
解决方案
原因是所有行都满足第三个条件
with(ejercicio, dato1 > 0 | dato1 < 1)
[1] TRUE TRUE TRUE TRUE TRUE
因此,不评估最后一个条件。可能,我们可以改变表达式的顺序,即最后一个应该超过第三个条件
ejercicio |>
mutate(Estatus = case_when(
dato1 == 1 ~ "Completado",
dato1 == 0 ~ "Sin empezar",
dato1 > 1 ~ "Sin sentido",
dato1 > 0 | dato1 < 1 ~ "En desarrollo"
))
-输出
dato1 Estatus
1 0.0 Sin empezar
2 0.1 En desarrollo
3 0.5 En desarrollo
4 1.0 Completado
5 1.1 Sin sentido
注意:这些是浮点数,所以使用==
应该小心,即除非注意精度,否则它可能不完全相等
推荐阅读
- json - Terraform:JSON 路径查询在 terraform 中不起作用
- javascript - 如何使用 onChange 设置当前 flatpickr 输入字段的值?
- flutter - 使用 BLoC 模式的 Flutter 默认计数器应用
- javafx - 如果 TextField 输入无效,如何使用 JavaFX 绑定禁用按钮
- reactjs - 如何限制 reactjs useContext 仅用于来自 react-router 的某些路由
- python - 更 Pythonic 的方式来遍历一个范围
- python-3.x - 如何更改 Wagtail 的默认语言?
- python-3.x - 在不缩放或移动的 3d 图中绘制文本
- javascript - 如何在 Vue.js 中使用 v-for 运行方法?
- r - 使用 data.table 对 r 中的序列求和