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

在R中统计每年唯一事件数量并绘制柱状图的问题求解

问题原因

你的代码存在两个核心问题:

  1. 未从service_date字段中提取年份维度,直接使用完整日期作为X轴,导致每个独立日期都被单独统计
  2. 直接在geom_bar的美学映射中调用n_distinct函数,不会自动按年份分组计算唯一值,无法得到预期的分年度统计结果

解决方案

以下两种实现方式均可得到符合要求的柱状图:

方式1:先汇总数据再绘图(逻辑最清晰,推荐使用)

library(dplyr)
library(ggplot2)

# 提取年份,按年分组统计唯一事件数
d_summary <- d %>%
  # 若不想安装lubridate包,可替换为 mutate(year = format(service_date, "%Y"))
  mutate(year = lubridate::year(service_date)) %>%
  group_by(year) %>%
  summarise(unique_event_cnt = n_distinct(event), .groups = "drop")

# 绘制柱状图
ggplot(d_summary, aes(x = factor(year), y = unique_event_cnt)) +
  geom_col(fill = "steelblue") +
  labs(x = "年份", y = "唯一事件数量")

方式2:直接在ggplot中实时计算(无需提前汇总)

library(dplyr)
library(ggplot2)

d %>%
  mutate(year = factor(lubridate::year(service_date))) %>%
  ggplot(aes(x = year, y = event)) +
  stat_summary(fun = n_distinct, geom = "col", fill = "steelblue") +
  labs(x = "年份", y = "唯一事件数量")

两种方案运行后均会得到3根高度为2的柱子,分别对应2011、2012、2013年的唯一事件计数,和你预期的效果一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:09:04