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

如何无需逐个过滤即可为所有id分组计算各variation的占比?

批量计算各id下variation的占比

你只需要在分组时同时包含id和variation,再基于id分组计算组内占比即可,无需逐个过滤id。完整代码如下:

library(dplyr)
library(scales)

# 构造原始数据集
c <- c(10, 20, 30, 40, 50, 40, 2, 40, 10, 50)
b <- c(40, 2, 40, 10, 50, 10, 20, 30, 40, 50)
a <- c(10, 50, 3, 60, 100,40, 2, 40, 10, 50)
id <- c("a", "b", "b", "a", "c", "a", "b", "b", "a", "c")
variation <- c("a3", "a3", "b1", "a2", "b1","a3", "a1", "b1", "a1", "b1" )

data <- data.frame(id, a, b, c, variation)

# 一次性计算所有id的variation占比
data_all_percentage <- data %>%
  # 按id和variation组合分组,统计每组数量
  group_by(id, variation) %>%
  count() %>%
  # 切换到仅按id分组,用于计算组内总数
  group_by(id) %>%
  # 计算占比并格式化百分比标签
  mutate(perc = n / sum(n),
         labels = percent(perc)) %>%
  # 按id和占比排序,提升可读性
  arrange(id, perc) %>%
  # 取消分组(可选,根据后续操作需求)
  ungroup()

# 查看结果
print(data_all_percentage)

执行后得到的结果:

# A tibble: 7 × 5
  id    variation     n  perc labels
  <chr> <chr>     <int> <dbl> <chr> 
1 a     a1            1  0.25 25%   
2 a     a2            1  0.25 25%   
3 a     a3            2  0.5  50%   
4 b     a1            1  0.2  20%   
5 b     a3            1  0.2  20%   
6 b     b1            3  0.6  60%   
7 c     b1            2  1    100%  

关键步骤说明:

  • group_by(id, variation):同时按用户id和变异类型分组,统计每个组合的样本数n
  • group_by(id):重新分组为仅id,此时sum(n)会计算每个id对应的总样本量
  • mutate(perc = n / sum(n)):基于每个id的总样本数,计算该id下各variation的占比
  • scales::percent(perc):将小数占比格式化为百分比字符串,方便后续展示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:41:16