如果所有汇总值都是NA,则dplyr汇总保留NA
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果所有汇总值都是NA,则dplyr汇总保留NA相关的知识,希望对你有一定的参考价值。
我想使用dplyr summary来按组计算总数。具体来说,如果并非所有求和值都是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
如果我设置na.rm = T
:
df %>% group_by(name) %>% summarise(number = sum(number, na.rm = T))
结果是
- 杰克= 3
- 玛丽= 1
- 艾伦= 0
如何解决这个问题,以便数字和NA的情况得到一个数字作为输出,但只有NA的情况得到NA作为输出。
答案
我们可以有一个if/else
条件 - if
all
'数字是NA
的值,然后返回NA
或else
得到sum
library(dplyr)
df %>%
group_by(name) %>%
summarise(number = if(all(is.na(number))) NA_real_ else sum(number, na.rm = TRUE))
另一答案
我正在努力做同样的事情,所以我写了一个解决方案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_
,如果all都是NA则返回NA,否则删除NA和计算总和无缺失值。
以上是关于如果所有汇总值都是NA,则dplyr汇总保留NA的主要内容,如果未能解决你的问题,请参考以下文章
仅当每月少于 10 天是 NA 时,如何使用 dplyr 和 lubridate 每月汇总每日数据?
如果焦点变量是NA,则在R中创建具有“替换”变量值的汇总变量
R语言dplyr包将dataframe中的NA值替换(replace)为0实战:所有NA值替换(replace)为0具体列的NA值替换(replace)为0若干列的NA值替换(replace)为0