如何在单个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
相关产品推荐
相关产品推荐

