r - 如果所有汇总值均为 NA,则 dplyr 汇总保留 NA

标签 r dplyr

我想使用 dplyr 汇总按组汇总计数。具体来说,如果不是所有求和值都是 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)

在这种情况下,我想要以下结果:
  • jack = 3
  • 玛丽 = 1
  • 艾伦 = NA

  • 但是,如果我设置 na.rm = F :
    df %>% group_by(name) %>% summarise(number = sum(number, na.rm = F))
    

    结果是:
  • jack = 3
  • 玛丽 = NA
  • 艾伦 = NA

  • 如果我设置 na.rm = T :
    df %>% group_by(name) %>% summarise(number = sum(number, na.rm = T))
    

    结果是
  • jack = 3
  • 玛丽 = 1
  • 艾伦 = 0

  • 我怎样才能解决这个问题,以便带有数字和 NA 的案例得到一个数字作为输出,但只有 NA 的案例得到 NA 作为输出。

    最佳答案

    我们可以有一个 if/else条件 - if all 'number 中的值为 NA ,然后返回 NAelse获取 sum

    library(dplyr)
    df %>% 
      group_by(name) %>% 
      summarise(number = if(all(is.na(number))) NA_real_ else sum(number, na.rm = TRUE))
    

    关于r - 如果所有汇总值均为 NA,则 dplyr 汇总保留 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54805570/

    相关文章:

    c++ - 在 R 和 Rcpp 中找到最大的 n 个唯一值及其频率

    r - 亚马逊 EMR : Using R code in Amazon EMR

    r - 在图例下方添加其他文本(R + ggplot)

    r - 将唯一 ID 分配给 dplyr 中分组变量中的连续行

    r - data.table 相当于 dplyr::filter_at

    r - 给定 R 中每个值的计数,如何轻松获得平均值、中位数、四分位数等?

    r - 根据成对相等对列进行分组

    r - 将所有值除以引用行

    r - 从基于向量的数据框中访问变量列表(的属性)

    r - 从另一个数据框 r 添加/减去数据框行