首页 > 解决方案 > 为什么 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"
  ))

标签: rdplyr

解决方案


原因是所有行都满足第三个条件

 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

注意:这些是浮点数,所以使用==应该小心,即除非注意精度,否则它可能不完全相等


推荐阅读