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

R中使用dplyr如何将行值转为列名实现聚合统计与归一化

实现方法

首先确保你已安装tidyverse套件(包含dplyr和tidyr两个核心包),未安装可先运行install.packages("tidyverse")。

1. 绝对数值统计结果

你可以结合tidyr包的pivot_wider()函数实现长表转宽表,缺失计数自动填充为0,代码如下:

library(tidyverse)

# 从原始数据直接生成宽格式计数表
df_wide_count <- df %>%
  count(year, category) %>%
  pivot_wider(
    names_from = year, # 取year列的取值作为新列名
    values_from = n, # 取统计得到的计数值填充单元格
    values_fill = 0 # 无匹配项的单元格填充为0
  )

运行后得到的结果结构如下:

category200920102011
A111
B210
C002

2. 按年份归一化的百分比版本

只需在统计计数后先按年份分组,计算单分类占当年总记录数的比例,再转宽表即可:

df_wide_pct <- df %>%
  count(year, category) %>%
  group_by(year) %>%
  # 计算百分比,可按需修改round()的第二个参数调整保留的小数位数,示例保留2位
  mutate(pct = round(n / sum(n) * 100, 2)) %>%
  ungroup() %>%
  pivot_wider(
    id_cols = category,
    names_from = year,
    values_from = pct,
    values_fill = 0
  )

运行后得到的百分比结果结构如下:

category200920102011
A33.3350.0033.33
B66.6750.000.00
C0.000.0066.67

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:54:03