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

R语言:按x聚合z子组中y的不重复值(避免重复计数)

问题解决:多维度分组去重计数并保留原变量

需求:对现有数据框,先按x、z分组计算y的唯一值数量,再在x维度聚合这些y的唯一值(同一x下不同z组的y唯一值不重复计数),同时保留原数据所有变量,无需额外创建表关联。

示例数据

df <- tibble(x = c("A1", "A1", "A1", "A1", "A1", "A2", "A2", "A2"),
             y = c(1, 1, 2, 1, 1, 1, 1, 1),
             z = c("a", "a", "a", "b", "b", "c", "c", "d"))

已完成步骤:按x、z分组计算y的唯一值数量

df |> 
  mutate(
    xz_n_dist = n_distinct(y),
    .by = c(x, z)
  )

输出结果:

x         y z     xz_n_dist
  <chr> <dbl> <chr>     <int>
1 A1        1 a             2
2 A1        1 a             2
3 A1        2 a             2
4 A1        1 b             1
5 A1        1 b             1
6 A2        1 c             1
7 A2        1 c             1
8 A2        1 d             1

完整解决方案

在现有代码基础上,通过嵌套分组计算直接添加x_n_dist列:

df |> 
  mutate(
    xz_n_dist = n_distinct(y),
    .by = c(x, z)
  ) |> 
  mutate(
    x_n_dist = length(unique(unlist(map(split(y, z), unique)))),
    .by = x
  )

最终输出结果

x         y z     xz_n_dist x_n_dist
  <chr> <dbl> <chr>     <int>    <int>
1 A1        1 a             2        3
2 A1        1 a             2        3
3 A1        2 a             2        3
4 A1        1 b             1        3
5 A1        1 b             1        3
6 A2        1 c             1        2
7 A2        1 c             1        2
8 A2        1 d             1        2

代码解释

  1. 第一步按x、z分组,用n_distinct(y)计算每组内y的唯一值数量,生成xz_n_dist列;
  2. 第二步按x分组,用split(y, z)将每个x组内的数据按z拆分,再通过map(unique)提取每个z组的y唯一值,最后用unique(unlist(...))合并并去重,统计长度得到x维度下不重复的y唯一值总数,生成x_n_dist列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:17:32