R语言如何基于ISLR的College数据框筛选多指标均在前10%的院校
基于ISLR College数据集的多维度Top10%院校筛选实现
核心逻辑判定
任务原文要求的三个维度上均处于前10%,语义明确为:院校必须同时满足PhD占比、毕业率、招生规模三个指标各自的全数据集前10%标准,而非三个维度各自的前10%院校取并集。
之前使用head()配合order()的操作如果未做跨维度的交叉匹配,就会出现筛选范围过大的偏差。
前置环境准备
- 加载依赖包与内置数据集
# 首次使用需先安装ISLR包 install.packages("ISLR") # 加载包并调用College数据集 library(ISLR) data(College)
- 匹配维度对应的数据集字段:
- PhD占比:对应字段
PhD,即院校教职中拥有博士学位的人员占比 - 毕业率:对应字段
Grad.Rate - 招生规模:对应字段
Enrollment,即院校在校注册学生数
- PhD占比:对应字段
标准实现流程
- 计算每个维度的前10%分界阈值
前10%的分界为全数据集该指标的90%分位数:数值大于等于该阈值的样本,即为该维度上处于前10%的院校。
# 计算三个指标的90%分位值,自动忽略空值 phd_cutoff <- quantile(College$PhD, 0.9, na.rm = TRUE) grad_cutoff <- quantile(College$Grad.Rate, 0.9, na.rm = TRUE) enroll_cutoff <- quantile(College$Enrollment, 0.9, na.rm = TRUE)
- 交叉筛选符合全部条件的院校
使用逻辑与运算,保留三个维度全部达标的样本,构造目标数据框:
# 多条件同时满足的筛选 qualified_colleges <- College[ College$PhD >= phd_cutoff & College$Grad.Rate >= grad_cutoff & College$Enrollment >= enroll_cutoff, ]
- 结果有效性校验
# 查看筛选得到的院校数量 nrow(qualified_colleges) # 查看三个维度的样本最小值,确认均达到90%分位阈值 apply(qualified_colleges[, c("PhD", "Grad.Rate", "Enrollment")], 2, min)
常见操作误区
单维度排序配合head()的写法仅能保证单一维度达标,无法匹配多维度同时满足的要求,属于典型的逻辑偏差示例:
# 错误示例:仅按PhD降序取前10%样本,另外两个维度无约束 wrong_result <- College[order(-College$PhD), ][1:round(0.1*nrow(College)), ]
这类写法得到的结果会混入PhD占比高,但毕业率、招生规模未进入前10%的院校,不符合任务要求。
内容的提问来源于stack exchange,提问作者user13880264
相关产品推荐
相关产品推荐

