dplyr :: case_when可以返回NAs和非NA的组合吗?

Uma*_*mao 5 r dplyr

可以case_when()作为dplyr回报混合NA和非NA价值?

当我要求它返回NA以响应一个语句,但是NA响应另一个语句时返回非值时,它会抛出一个评估错误:

例如,我想要1所有的价值观cyl >= 6NA价值观cyl < 6

> library("dplyr")
> mtcars %>% mutate(thing = case_when(cyl >= 6 ~ 1, cyl < 6 ~ NA ))
Run Code Online (Sandbox Code Playgroud)

mutate_impl(.data,dots)出错:评估错误:必须是double类型,不是逻辑.

单独来说,这两个陈述都很好.

如果要求返回所有NA,而不是NAs和非NAs 的混合,则不存在此问题.

例如:返回NA所有值cyl >= 6

> mtcars %>% mutate(thing = case_when(cyl >= 6 ~ NA))
  cyl thing
1   6    NA
2   6    NA
3   4    NA
Run Code Online (Sandbox Code Playgroud)

看起来不错.

> mtcars %>% mutate(thing = case_when(cyl >= 6 ~ NA, cyl < 6 ~ NA ))
  cyl thing
1   6    NA
2   6    NA
3   4    NA
Run Code Online (Sandbox Code Playgroud)

凉.

> mtcars[1:3,] %>% mutate(thing = case_when(cyl == 6 ~ 1, cyl < 6 ~ NA, cyl > 6 ~ NA ))
Run Code Online (Sandbox Code Playgroud)

mutate_impl(.data,dots)出错:评估错误:必须是double类型,不是逻辑.

不酷.

NB:为清楚起见,返回在实施例中的项目都来自mtcars[1:3,]%>% select(cyl, thing)在所述表达式的结尾.

akr*_*run 5

这是的问题class。我们需要NA_real匹配数字类型

mtcars %>% 
      mutate(thing = case_when(cyl >= 6 ~ 1,
                               cyl < 6 ~ NA_real_ )) 
Run Code Online (Sandbox Code Playgroud)

另外,第二种情况

mtcars[1:3,] %>% 
       mutate(thing = case_when(cyl == 6 ~ 1, 
                                cyl < 6 ~ NA_real_, 
                                cyl > 6 ~ NA_real_ ))  %>%
       select(cyl, thing)
# cyl thing
#   6     1
#   6     1
#   4    NA
Run Code Online (Sandbox Code Playgroud)

  • 是的,在阅读TFM十次后*现在*我看到“所有RHS必须评估为相同类型的向量”。 (2认同)