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

基于ggplot2的diamonds数据集按0.1区间计算carat列平均值

按0.1区间计算diamonds数据集carat列的平均值

嘿,这个需求挺实用的,我来给你一步步拆解怎么实现!我们可以用dplyr来做分组计算,配合ggplot2还能把结果可视化出来,下面是具体步骤:

方法一:用floor函数手动生成区间标签

这种方法逻辑清晰,能直观看到区间的生成过程:

# 先加载tidyverse包(包含dplyr和ggplot2,一步搞定数据处理和可视化)
library(tidyverse)

# 处理数据并计算区间均值
diamond_carat_summary <- diamonds %>%
  # 生成区间下限:比如0.23会被转换成0.2,0.35转换成0.3
  mutate(carat_lower = floor(carat * 10) / 10) %>%
  # 把区间转换成易读的文本标签,比如"0.2-0.29"
  mutate(carat_interval = paste0(carat_lower, "-", carat_lower + 0.09)) %>%
  # 按区间分组
  group_by(carat_interval) %>%
  # 计算每个区间的carat平均值,保留两位小数
  summarize(average_carat = round(mean(carat), 2)) %>%
  # 按区间排序,让结果更整齐
  arrange(carat_interval)

# 查看计算结果
print(diamond_carat_summary)

方法二:用cut函数直接定义区间

如果想更简洁,可以用cut()函数直接划分区间,省去手动生成标签的步骤:

diamond_carat_summary_cut <- diamonds %>%
  # 用cut函数划分区间:从0.2开始,每0.1为一个区间
  mutate(carat_interval = cut(
    carat,
    breaks = seq(0.2, max(diamonds$carat) + 0.1, by = 0.1),
    # 自动生成对应的区间标签
    labels = str_c(seq(0.2, max(diamonds$carat), by = 0.1), "-", seq(0.29, max(diamonds$carat)+0.09, by = 0.1)),
    include.lowest = TRUE # 确保最小的carat值(0.2)被包含在第一个区间里
  )) %>%
  group_by(carat_interval) %>%
  summarize(average_carat = round(mean(carat), 2)) %>%
  drop_na() # 去掉没有数据的空区间(比如超大carat的区间可能没有样本)

print(diamond_carat_summary_cut)

可选:用ggplot2可视化结果

如果想直观看到各区间的平均值分布,可以画个柱状图:

ggplot(diamond_carat_summary, aes(x = carat_interval, y = average_carat)) +
  geom_bar(stat = "identity", fill = "#2ecc71") +
  labs(
    title = "Average Carat by 0.1 Interval",
    x = "Carat Range",
    y = "Average Carat Value"
  ) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签,避免重叠

两种方法都能完美实现你的需求,选哪种全看个人习惯~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:42:13