dplyr总结不正确地排除NA

sta*_*tor 0 r dplyr

我们可以通过气缸对mtcars进行分组,并使用一些简单的代码汇总每加仑英里数.

library(dplyr)
mtcars %>% 
  group_by(cyl) %>% 
  summarise(avg = mean(mpg))
Run Code Online (Sandbox Code Playgroud)

这提供了如下所示的正确输出.

    cyl      avg
1     4 26.66364
2     6 19.74286
3     8 15.10000
Run Code Online (Sandbox Code Playgroud)

如果我恳请dplyr排除NA,我会得到一些奇怪的结果.

mtcars %>% 
  group_by(cyl) %>% 
  summarise(avg = mean(!is.na(mpg)))
Run Code Online (Sandbox Code Playgroud)

由于此数据集中没有NA,因此结果应与上述相同.但它平均所有的mpg都精确到"1".我的代码或dplyr中的错误有问题吗?

    cyl   avg
1     4     1
2     6     1
3     8     1
Run Code Online (Sandbox Code Playgroud)

我的实际数据集确实有一些NA,我只需要为此摘要排除,但表现出相同的行为.

Inf*_*ess 5

你要这个:

mtcars %>% 
group_by(cyl) %>% 
summarise(avg = mean(mpg, na.rm = T))

# A tibble: 3 x 2
    cyl      avg
  <dbl>    <dbl>
1     4 26.66364
2     6 19.74286
3     8 15.10000
Run Code Online (Sandbox Code Playgroud)

现在,你正在返回一个logical向量!is.na(mpg).当你使用mean()逻辑向量时,它将被强制为1,而不是logical你想要的值.