如何在R中针对diamonds数据按净度类型获取价格极值及max函数条件应用
嘿,作为R新手能想到用函数封装逻辑,这个思路超赞!针对你的需求,我整理了两种实用的实现方案,帮你轻松搞定diamonds数据集的净度价格范围统计:
方案一:自定义可传入条件的函数
如果你确实需要一个能灵活传入clarity筛选条件的函数,用dplyr包来实现会非常直观。先确保你已经加载了ggplot2(因为diamonds数据集在这个包里)和dplyr:
# 加载所需包 library(ggplot2) library(dplyr) # 定义自定义函数 get_clarity_price_range <- function(condition = TRUE) { diamonds %>% filter({{ condition }}) %>% # 使用{{}}传递表达式条件,支持灵活筛选 summarize( min_price = min(price, na.rm = TRUE), max_price = max(price, na.rm = TRUE) ) }
函数使用示例:
- 查看净度为
SI1的价格范围:
get_clarity_price_range(clarity == "SI1")
- 同时查看
VS1和VS2两种净度的价格范围:
get_clarity_price_range(clarity %in% c("VS1", "VS2"))
- 不传入条件时,默认返回整个数据集的价格范围:
get_clarity_price_range()
这里的{{}}(大括号包裹)是dplyr里的表达式传递语法,能让你灵活传入任何针对clarity的筛选条件,完美匹配你的需求~
方案二:一次性获取所有净度类型的价格范围
如果你其实是想直接拿到8种净度各自的min和max价格,那不用逐个调用函数,直接分组统计会更高效:
# 按净度分组,计算每个组的最小/最大价格 diamonds %>% group_by(clarity) %>% summarize( min_price = min(price, na.rm = TRUE), max_price = max(price, na.rm = TRUE) ) %>% arrange(clarity) # 按净度类型排序结果,方便查看
用Base R实现的替代方案
如果你还没接触过dplyr,用Base R的aggregate函数也能轻松搞定:
aggregate(price ~ clarity, data = diamonds, FUN = function(x) c(min_price = min(x), max_price = max(x)))
这样就能一次性得到所有净度类型的价格范围,比逐个传条件更省心~
内容的提问来源于stack exchange,提问作者Sovik Gupta
相关产品推荐
相关产品推荐

