基于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
相关产品推荐
相关产品推荐

