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

R语言:如何用紧凑写法自动计算分组下各ethnicity的占比

自动计算分组内各ethnicity占比的紧凑实现方式

可以结合dplyr和tidyr的函数实现自动适配所有ethnicity取值的占比计算,无需手动定义每个占比字段,步骤如下:

1. 准备示例数据

假设你的数据集是原始观测数据(每行代表一个个体),或者已包含计数列:

library(dplyr)
library(tidyr)

# 原始观测数据示例
raw_df <- tibble(
  number_of_degrees = sample(1:3, 100, replace = TRUE),
  ethnicity = sample(c("A", "B", "C"), 100, replace = TRUE)
)

# 带计数列的数据集示例
count_df <- tibble(
  number_of_degrees = rep(c(1, 2, 3), each = 3),
  ethnicity = rep(c("A", "B", "C"), 3),
  count = sample(10:50, 9)
)

2. 针对原始观测数据的实现

先按number_of_degrees和ethnicity分组统计数量,再计算分组内占比,最后转宽生成对应占比字段:

raw_df_percent <- raw_df %>%
  # 分组统计每个ethnicity的数量
  group_by(number_of_degrees, ethnicity) %>%
  summarise(n = n(), .groups = "drop_last") %>%
  # 计算分组内占比(转为百分比)
  mutate(percent = n / sum(n) * 100) %>%
  # 移除计数列,转宽生成percent_前缀的占比字段
  select(-n) %>%
  pivot_wider(
    names_from = ethnicity,
    values_from = percent,
    names_prefix = "percent_"
  )

3. 针对带计数列的数据集的实现

直接基于已有计数列计算占比并转宽:

count_df_percent <- count_df %>%
  group_by(number_of_degrees) %>%
  # 计算每个ethnicity在分组内的占比
  mutate(percent = count / sum(count) * 100) %>%
  select(-count) %>%
  pivot_wider(
    names_from = ethnicity,
    values_from = percent,
    names_prefix = "percent_"
  )

核心逻辑说明

  • group_by(number_of_degrees)确保在每个学位数量组内计算占比
  • pivot_wider自动将ethnicity的所有取值转为列名,配合names_prefix统一添加percent_前缀,无需手动逐个定义percent_a、percent_b等字段
  • 无论ethnicity有多少种取值,代码都能自动适配生成对应的占比列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:07:28