如何在R语言dplyr中按ID分组后自定义函数计算等级并输出完整数据框?
在R中用dplyr实现分组、等级评估并输出完整数据框
步骤1:加载dplyr包
先确保安装并加载dplyr工具包:
# 未安装的话先执行安装命令 # install.packages("dplyr") library(dplyr)
步骤2:准备数据(替换为你的实际数据)
假设你的原始数据框包含ID和需要评估等级的指标(比如score),先模拟一份示例数据:
df <- tibble( ID = c(1,1,1,2,2,3,3,3,3), score = c(85,92,78,65,72,90,88,55,60) )
步骤3:定义等级评估函数
根据你的业务规则自定义等级逻辑,以下是两种常见场景的函数示例:
示例1:按固定区间划分等级(全局/组内通用)
get_level <- function(score) { case_when( score >= 90 ~ "优秀", score >= 80 & score < 90 ~ "良好", score >= 60 & score < 80 ~ "及格", score < 60 ~ "不及格", TRUE ~ NA_character_ ) }
示例2:按组内排名比例划分等级
get_group_level <- function(score) { rank_pct <- percent_rank(score) case_when( rank_pct >= 0.8 ~ "优秀", rank_pct >= 0.3 & rank_pct < 0.8 ~ "良好", rank_pct < 0.3 ~ "待提升" ) }
步骤4:分组处理并输出完整数据框
用group_by()按ID分组,再通过mutate()调用自定义函数添加等级列:
场景1:全局等级评估(无需组内计算可跳过分组)
df_result <- df %>% mutate(level = get_level(score))
场景2:组内等级评估(按ID分组后计算)
df_result <- df %>% group_by(ID) %>% mutate(group_level = get_group_level(score)) %>% ungroup() # 取消分组,恢复普通数据框结构
查看最终结果
直接打印输出完整数据框:
print(df_result)
输出示例(以组内等级为例):
# A tibble: 9 × 3 ID score group_level <dbl> <dbl> <chr> 1 1 85 良好 2 1 92 优秀 3 1 78 待提升 4 2 65 待提升 5 2 72 优秀 6 3 90 优秀 7 3 88 良好 8 3 55 待提升 9 3 60 待提升
内容的提问来源于stack exchange,提问作者Beginner
相关产品推荐
相关产品推荐

