如何依据crim变量中位数为boston数据集新增高低判定列?
boston数据集新增犯罪率相对中位数标注列的实现方法
首先将已计算得到的犯罪率中位数存储为独立对象,避免重复计算:
median_crim <- median(boston$crim)
基础R原生实现(无需加载第三方包)
通过ifelse完成条件判断,新增对应标注列:
boston$crim_level <- ifelse( boston$crim > median_crim, "高于中位数", ifelse( boston$crim == median_crim, "等于中位数", "低于中位数" ) )
tidyverse 工作流实现
搭配dplyr的mutate和case_when函数实现多条件判断,可读性优于嵌套ifelse:
library(dplyr) boston <- boston %>% mutate( crim_level = case_when( crim > median_crim ~ "高于中位数", near(crim, median_crim) ~ "等于中位数", .default = "低于中位数" ) )
快速分箱实现
如果无需单独标记等于中位数的观测,可直接通过cut函数按断点切分连续值生成标注:
boston$crim_level <- cut( boston$crim, breaks = c(-Inf, median_crim, Inf), labels = c("低于等于中位数", "高于中位数"), include.lowest = TRUE )
实操注意事项
- 新增列的名称可根据分析需求自定义,只要与数据集现有列名无重复即可
- 连续数值的等值判断容易受浮点精度影响,推荐用
dplyr::near()替代==做等值校验,避免判断失准 - 若数据集为data.table格式,判断逻辑完全通用,仅需替换为对应的列赋值语法即可,参考实现:
library(data.table) boston[, crim_level := ifelse(crim > median_crim, "高于中位数", "低于中位数")]
内容的提问来源于stack exchange,提问作者Jrem52
相关产品推荐
相关产品推荐

