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

如何在R数据框中对多列进行计数与分组并转换为堆叠柱状图适用格式

如何在R数据框中对多列进行计数与分组并转换为堆叠柱状图适用格式

嗨,这个问题其实用tidyverse工具包就能高效解决,完全不用绕弯路!我来一步步给你演示~

首先先确认下你的原始数据:

df <- data.frame(A=c(1,2,1,1,3,3,2,2),B=c(2,2,2,3,2,3,3,1),C=c(1,1,1,1,1,2,2,3))

我们的目标是把这种宽格式数据,转换成类别(A/B/C)、分数(1/2/3)、计数的长格式,这样就完美适配堆叠柱状图的需求了。直接用tidyverse里的pivot_longer和count函数就能一步到位:

# 先加载tidyverse包(包含dplyr和tidyr工具)
library(tidyverse)

# 转换为堆叠图适用格式
stacked_data <- df %>%
  # 把所有列转成长格式:列名变成Category,对应数值变成Score
  pivot_longer(cols = everything(), names_to = "Category", values_to = "Score") %>%
  # 按Category和Score分组,统计每组的数量,命名为Count
  count(Category, Score, name = "Count")

# 查看转换后的结果
print(stacked_data)

运行后你会得到这样的结果:

# A tibble: 9 × 3
  Category Score Count
  <chr>    <dbl> <int>
1 A            1     3
2 A            2     3
3 A            3     2
4 B            1     1
5 B            2     4
6 B            3     3
7 C            1     5
8 C            2     2
9 C            3     1

要是想直接画堆叠柱状图,用ggplot2基于这个转换后的数据直接画就行:

ggplot(stacked_data, aes(x = Category, y = Count, fill = factor(Score))) +
  geom_bar(stat = "identity") +
  labs(title = "分数分布堆叠柱状图", x = "类别", y = "计数", fill = "分数")

是不是比你之前的复杂方法简洁太多啦?tidyverse这套工具就是专门用来处理这类数据整理和统计需求的,用熟了会省超多时间~

备注:内容来源于stack exchange,提问作者maplesyrup123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 13:12:43