基于R语言match的子集操作:院校录取人数统计与分层排序
R语言处理院校候选人Offer数据完整方案
嘿,我看你已经完成了数据筛选和初步的频次统计工作,接下来我帮你补全院校分层的部分,还会给你一些代码优化的小建议,让整个流程更清晰易维护~
1. 数据筛选与预处理
你已经写出了核心的筛选和院校名称清理代码,我把变量名改得更具可读性(当然原代码逻辑完全没问题):
# 筛选接受Offer的候选人子集 yes_candidates <- subset(finalr, Offer.Decision == "yes") # 清理院校名称中的所有空格(不区分大小写) yes_candidates$School <- gsub(" ", "", yes_candidates$School, ignore.case = TRUE)
2. 统计各院校接受Offer人数并降序排序
你的频次统计代码很扎实,这里补充列名重命名的步骤,让结果数据框更直观:
# 统计各院校接受人数并降序排序,转为数据框 school_freq <- as.data.frame( sort(table(yes_candidates$School), decreasing = TRUE), stringsAsFactors = FALSE ) # 重命名列,方便后续层级划分操作 colnames(school_freq) <- c("School", "Accept_Count")
3. 院校层级划分(铂金/黄金等)
接下来补全你未完成的分层逻辑,这里我们按照录取人数的排名区间来定义层级(你可以根据实际需求调整区间数值):
- 铂金(Platinum):排名前13的院校
- 黄金(Gold):排名14-30的院校
- 白银(Silver):排名31及以后的院校
方式1:用dplyr包(更简洁易读)
# 先安装并加载dplyr包(首次使用需要安装) # install.packages("dplyr") library(dplyr) # 添加排名列 school_freq <- school_freq %>% mutate(Rank = row_number()) # 划分层级 school_freq <- school_freq %>% mutate(Tier = case_when( Rank <= 13 ~ "Platinum", Rank <= 30 ~ "Gold", TRUE ~ "Silver" ))
方式2:用基础R(无需额外安装包)
如果你不想加载外部包,用基础R也能实现:
# 添加排名列 school_freq$Rank <- seq(nrow(school_freq)) # 从低到高赋值层级 school_freq$Tier <- "Silver" school_freq$Tier[school_freq$Rank <= 30] <- "Gold" school_freq$Tier[school_freq$Rank <= 13] <- "Platinum"
4. 查看最终结果
运行完以上代码后,直接打印数据框就能看到带层级的院校录取人数统计了:
# 打印完整结果 print(school_freq) # 或者只查看铂金层级的院校 print(subset(school_freq, Tier == "Platinum"))
内容的提问来源于stack exchange,提问作者huaweiman
相关产品推荐
相关产品推荐

