首页 > 解决方案 > 如果所有汇总值都是 NA,则 dplyr summarize 保持 NA

问题描述

我想使用 dplyr summarise 按组汇总计数。具体来说,如果不是所有的总和值都是 NA,我想删除 NA 值,但是如果所有的总和值都是 NA,我想显示 NA。例如:

name <- c("jack", "jack", "mary", "mary", "ellen", "ellen")
number <- c(1,2,1,NA,NA,NA)

df <- data.frame(name,number)

在这种情况下,我想要以下结果:

但是,如果我设置na.rm = F

df %>% group_by(name) %>% summarise(number = sum(number, na.rm = F))

结果是:

如果我设置na.rm = T

df %>% group_by(name) %>% summarise(number = sum(number, na.rm = T))

结果是

我该如何解决这个问题,以便带有数字和 NA 的情况得到一个数字作为输出,但只有 NA 的情况得到 NA 作为输出。

标签: rdplyr

解决方案


我也在为同样的事情苦苦挣扎,所以我在 package 中写了一个解决方案hablar。尝试:

library(hablar)

df %>% group_by(name) %>% 
  summarise(number = sum_(number))

这给了你:

# A tibble: 3 x 2
  name  number
  <fct>  <dbl>
1 ellen    NA 
2 jack      3.
3 mary      1.

并不是唯一的语法差异是sum_如果全部为 NA 则返回 NA 的函数,否则删除 NA 并计算总和无缺失值。


推荐阅读