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

R语言宽格式频率表转长表适配ggplot分组柱状图的实现方法

你需要的是宽格式数据转长格式数据的操作,属于R数据清洗的常规需求,常用实现方案如下:

方案1:tidyverse生态推荐写法(最常用,可读性强)

用tidyr包的pivot_longer()函数实现,代码示例:

# 未安装包可先运行 install.packages("tidyverse")
library(tidyr)

freq_long <- pivot_longer(
  data = freq,
  cols = c(df1, df2), # 指定需要被转换为长格式的列
  names_to = "source", # 原列名存入source列
  values_to = "value" # 原数值存入value列
)

运行后得到的freq_long就是你需要的目标结构。

方案2:基础R实现(无需安装第三方包)

如果不想依赖外部包,可以用基础函数实现:

freq_long <- data.frame(
  variable = rep(freq$variable, each = 2),
  source = rep(c("df1", "df2"), times = nrow(freq)),
  value = as.vector(t(freq[, c("df1", "df2")]))
)

方案3:data.table实现(适合大数量级场景,性能最优)

如果数据量很大,推荐用data.table的melt函数:

# 未安装包可先运行 install.packages("data.table")
library(data.table)

setDT(freq) # 转换为data.table格式
freq_long <- melt(
  freq,
  id.vars = "variable",
  measure.vars = c("df1", "df2"),
  variable.name = "source",
  value.name = "value"
)

转换完成后,你可以直接用ggplot2绘制分组柱状图,示例代码如下:

library(ggplot2)

ggplot(freq_long, aes(x = factor(variable), y = value, fill = source)) +
  geom_col(position = position_dodge(width = 0.9), width = 0.8) +
  labs(x = "变量取值", y = "计数") +
  theme_bw()

即可得到你预期的分组柱状图效果。

内容的提问来源于stack exchange,提问作者Mike de Groot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:42:01