R语言dplyr分组后按数值区间条件新增列的实现方法
R语言实现分组新增准确率等级列的方法
你写的伪代码逻辑框架正确,只需要把伪语法替换为R原生合法判断逻辑即可,基于dplyr的可运行实现如下:
- 核心逻辑用
abs(pred_val - actual_val) <= 阈值直接计算预测值和真实值的偏差绝对值,替代伪代码里的isin区间判断 - 利用
case_when顺序判断的特性,先匹配最严格的good等级区间,再匹配次严格的medium区间,剩余未匹配的行统一赋值为poor,不需要重复写区间排除逻辑
# 加载依赖包 library(dplyr) # 示例数据 df <- structure(list(group = c("A", "A", "A", "A", "A", "B", "B", "B", "B"), pred_val = c(22.52, 21.87, 31.45, 21.45, 19.99, 13.96, 15.97, 6.5, 19.89), actual_val = c(21L, 21L, 21L, 21L, 21L, 16L, 16L, 16L, 16L)), class = "data.frame", row.names = c(NA, -9L)) # 分组计算 df_result <- df %>% group_by(group) %>% mutate( acc_level = case_when( abs(pred_val - actual_val) <= 2 ~ "good", abs(pred_val - actual_val) <= 5 ~ "medium", TRUE ~ "poor" ) ) %>% ungroup() # 操作完成后解除分组,避免后续数据处理受分组结构干扰
运行后得到的结果如下:
# A tibble: 9 × 4 group pred_val actual_val acc_level <chr> <dbl> <int> <chr> 1 A 22.5 21 good 2 A 21.9 21 good 3 A 31.4 21 poor 4 A 21.4 21 good 5 A 20.0 21 good 6 B 14.0 16 medium 7 B 16.0 16 good 8 B 6.5 16 poor 9 B 19.9 16 medium
说明:当前代码默认区间包含边界值,如果需要开区间判断,只需要把判断条件里的
<=替换为<即可。
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

