如何在R语言中将四分位数数据分组保存并查询对应学生
学生成绩分组与查询方案
基于你提供的成绩数据,以下是用R语言实现分组和查询的具体步骤:
一、动态获取各科目四分位数
手动输入分位数容易出错,建议用代码自动提取:
# 提取各科目25%(第一四分位数)和75%(第三四分位数)分位数,忽略缺失值 his_q1 <- quantile(SS$HIS, 0.25, na.rm = TRUE) his_q3 <- quantile(SS$HIS, 0.75, na.rm = TRUE) bio_q1 <- quantile(SS$BIO, 0.25, na.rm = TRUE) bio_q3 <- quantile(SS$BIO, 0.75, na.rm = TRUE) che_q1 <- quantile(SS$CHE, 0.25, na.rm = TRUE) che_q3 <- quantile(SS$CHE, 0.75, na.rm = TRUE)
二、为各科目添加分组列
方法1:基础R实现
用嵌套ifelse生成分组:
# 历史科目分组:≤Q1→A,≥Q3→B,其余→C SS$HIS_group <- ifelse(SS$HIS <= his_q1, "A", ifelse(SS$HIS >= his_q3, "B", "C")) # 生物科目分组 SS$BIO_group <- ifelse(SS$BIO <= bio_q1, "A", ifelse(SS$BIO >= bio_q3, "B", "C")) # 化学科目分组 SS$CHE_group <- ifelse(SS$CHE <= che_q1, "A", ifelse(SS$CHE >= che_q3, "B", "C"))
方法2:dplyr包实现(更易读)
如果习惯用tidyverse工具链,用case_when更清晰:
library(dplyr) SS <- SS %>% mutate( HIS_group = case_when( HIS <= his_q1 ~ "A", HIS >= his_q3 ~ "B", TRUE ~ "C" ), BIO_group = case_when( BIO <= bio_q1 ~ "A", BIO >= bio_q3 ~ "B", TRUE ~ "C" ), CHE_group = case_when( CHE <= che_q1 ~ "A", CHE >= che_q3 ~ "B", TRUE ~ "C" ) )
三、保存分组后的数据集
可以选择保存为CSV(通用格式)或RData(R专用,保留数据结构):
# 保存为CSV文件,不保留行名 write.csv(SS, "student_scores_with_groups.csv", row.names = FALSE) # 保存为RData文件,方便后续直接加载 save(SS, file = "student_scores_with_groups.RData")
四、查询各组学生
1. 单个科目分组查询
比如查询历史科目A组的学生:
# 基础R写法 his_group_A <- subset(SS, HIS_group == "A") # dplyr写法 his_group_A <- SS %>% filter(HIS_group == "A")
替换HIS_group为BIO_group/CHE_group,即可查询对应科目的分组学生。
2. 多科目组合查询
比如查询历史和生物都为A组的学生:
multi_A_students <- SS %>% filter(HIS_group == "A" & BIO_group == "A")
3. 查看分组统计信息
可以快速查看各组的成绩分布和人数:
# 基础R:查看历史科目各组的成绩摘要 by(SS$HIS, SS$HIS_group, summary) # dplyr:生成各组详细统计 SS %>% group_by(HIS_group) %>% summarise( 最低分 = min(HIS, na.rm = TRUE), 第一四分位数 = quantile(HIS, 0.25, na.rm = TRUE), 中位数 = median(HIS, na.rm = TRUE), 第三四分位数 = quantile(HIS, 0.75, na.rm = TRUE), 最高分 = max(HIS, na.rm = TRUE), 学生人数 = n() )
内容的提问来源于stack exchange,提问作者Flower
相关产品推荐
相关产品推荐

