r - 如果所有汇总值都是 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)
在这种情况下,我想要以下结果:
- 杰克 = 3
- 玛丽 = 1
- 艾伦 = NA
但是,如果我设置na.rm = F
:
df %>% group_by(name) %>% summarise(number = sum(number, na.rm = F))
结果是:
- 杰克 = 3
- 玛丽 = 不适用
- 艾伦 = NA
如果我设置na.rm = T
:
df %>% group_by(name) %>% summarise(number = sum(number, na.rm = T))
结果是
- 杰克 = 3
- 玛丽 = 1
- 艾伦 = 0
我该如何解决这个问题,以便带有数字和 NA 的情况得到一个数字作为输出,但只有 NA 的情况得到 NA 作为输出。
解决方案
我也在为同样的事情苦苦挣扎,所以我在 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 并计算总和无缺失值。
推荐阅读
- rust-diesel - Rust Diesel 库使用 Timestamptz 反序列化 Postgres DateTIme,
- python-3.x - 为什么 discord.Client.wait_for 在有事件时要求事件?
- unit-testing - 如何编写用于导入 CSV 文件的 Apex 测试类?
- sql - 在 Jupyter 笔记本中导入 cx_Oracle 会出现 ModuleNotFoundError
- python - 如何从两列计算数据帧
- assembly - MIPS 程序集,.space 数据
- mysql - 无法在 PHPMYADMIN 上创建此 MYSQL 触发器
- pyspark-dataframes - 如何使用pyspark从spark df中删除空列
- javascript - Phaser 3 在场景之间共享自定义对象数据?
- android - 如何检测橡皮擦工具边界与路径生成的线之间的冲突?