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

如何统计diamonds数据集按价格分位数分组的样本数量

实现方案

你可以通过tidyverse工具集实现需求,以下分为两种常见场景提供可直接运行的代码:

场景1:使用全局统一的价格分位数区间

所有cut分类共用一套价格分位划分规则,适合跨cut类别对比不同价位的销量:

library(tidyverse)

# 自定义分位规则,示例为四分位,改为seq(0, 1, 0.1)即为十分位,可按需调整
quantile_breaks <- quantile(diamonds$price, probs = seq(0, 1, 0.25), na.rm = TRUE)

# 统计各cut分类下每个价格区间的销量
global_stat <- diamonds %>%
  mutate(price_range = cut(price, breaks = quantile_breaks, include.lowest = TRUE, dig.lab = 10)) %>%
  count(cut, price_range, name = "sales_volume")

# 打印完整统计结果
print(global_stat, n = Inf)

场景2:按cut分组计算各组内的价格分位数区间

每个cut分类单独计算分位,和你绘制的lvplot分组分布对应,适合看单组内不同分位的样本量:

library(tidyverse)

grouped_stat <- diamonds %>%
  group_by(cut) %>%
  mutate(price_range = cut(price, 
                           breaks = quantile(price, probs = seq(0, 1, 0.25), na.rm = TRUE),
                           include.lowest = TRUE,
                           dig.lab = 10)) %>%
  count(price_range, name = "sales_volume") %>%
  ungroup()

# 打印完整统计结果
print(grouped_stat, n = Inf)

参数说明

  • probs参数:自定义分位密度,比如seq(0, 1, 0.2)就是将价格分为5个20%分位区间
  • include.lowest = TRUE:保证价格最小值被纳入第一个区间,避免样本遗漏
  • dig.lab = 10:避免价格区间标签显示为科学计数法,保持可读性

可选:将统计值标注到lvplot上

如果需要在原有图表上直接显示每个分位的样本量,可以添加文本标签层:

library(lvplot)

# 计算标签放置的y轴位置(取每个区间的价格中位数)
label_data <- grouped_stat %>%
  rowwise() %>%
  mutate(price_mid = mean(as.numeric(str_extract_all(price_range, "\\d+")[[1]]))) %>%
  ungroup()

ggplot(diamonds, aes(x = cut, y = price)) +
  geom_lv() +
  geom_text(data = label_data, aes(label = sales_volume, y = price_mid), 
            color = "white", size = 3, fontface = "bold") +
  labs(title = "Cut of Diamonds by Price")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:42:03