如何在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
相关产品推荐
相关产品推荐

