首页 > 解决方案 > 缺少数据时如何使用 n() 按组计数案例

问题描述

我正在尝试summarise使用平均数和案例数进行数据处理,而不计算丢失的数据。有可能做到n()吗?N 的预期结果应该是3, 2

library(tidyverse)

df <- tibble(g = c(1, 1, 1, 2, 2, 2), x = c(1, 2, 3, 4, NA, 5))

df %>%
  group_by(g) %>%
  summarise(M = mean(x, na.rm = TRUE),
            N = n()) %>%
  ungroup()
#> `summarise()` ungrouping output (override with `.groups` argument)
#> # A tibble: 2 x 3
#>       g     M     N
#>   <dbl> <dbl> <int>
#> 1     1   2       3
#> 2     2   4.5     3
Created on 2020-12-16 by the reprex package (v0.3.0)

标签: rtidyverse

解决方案


用于complete.cases获取完整/不完整行的逻辑向量,然后sum按组获取向量的值。

df %>%
  mutate(N = complete.cases(.)) %>%
  group_by(g) %>%
  summarise(M = mean(x, na.rm = TRUE),
            N = sum(N), .groups = 'drop') %>%
  ungroup()
## A tibble: 2 x 3
#      g     M     N
#  <dbl> <dbl> <int>
#1     1   2       3
#2     2   4.5     2

推荐阅读