You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个group_by+summarise中计算多条件下的distinct值?

一次group_by+summarise完成全局与条件去重统计

你可以通过在summarise中直接对目标变量做条件子集化,同时计算两种场景下的n_distinct值,无需分开执行两次操作。

示例数据

library(tidyverse)

set.seed(1)

sample_size = 20

df = tibble(id = 1:sample_size,
            var_1 = sample(c(1:5), sample_size, replace = TRUE),
            var_2 = sample(c('yes','no','maybe'), sample_size, replace = TRUE),
            month = sample(c(1:12), sample_size, replace = TRUE),
            year = sample(c(2022,2023), sample_size, replace = TRUE)
)

合并后的代码实现

df %>% 
  group_by(month, year) %>% 
  summarise(
    distinct_var_1 = n_distinct(var_1),  # 分组内所有var_1的不同观测数
    distinct_var_1_maybe = n_distinct(var_1[var_2 == 'maybe'])  # 仅var_2为'maybe'时的var_1不同观测数
  ) %>% 
  ungroup()

代码说明

  • n_distinct(var_1):直接统计分组内全部var_1的唯一值数量,对应你原本的第一个需求。
  • n_distinct(var_1[var_2 == 'maybe']):通过var_2 == 'maybe'筛选出符合条件的var_1值,再统计其唯一值数量,效果等价于先执行filter再统计,但省去了额外的筛选步骤。

如果某个分组中没有var_2 == 'maybe'的记录,n_distinct会返回0;若需要和分开操作的结果完全一致(无符合条件的分组不显示),可在代码末尾追加filter(distinct_var_1_maybe > 0),不过保留0通常能更完整地展示所有分组的统计情况。

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:40:28