如何在R语言dplyr中基于分位数为Age列生成分桶新列
实现方案
你可以结合dplyr的mutate()和case_when()函数完成分桶操作,完整可运行代码如下:
# 加载dplyr包 library(dplyr) # 生成测试数据 df = data.frame( Age = sample(18:98, 1000, replace = TRUE) ) # 预计算分位数阈值,避免重复计算提升效率 age_quantiles <- quantile(df$Age, probs = c(0.25, 0.5, 0.75)) # 分桶生成新列 df <- df %>% mutate(Age_Bucket = case_when( # 小于等于25%分位数的归为25%桶 Age <= age_quantiles[1] ~ "25%", # 大于25%分位数且小于等于50%分位数的归为50%桶 Age <= age_quantiles[2] ~ "50%", # 大于50%分位数且小于等于75%分位数的归为75%桶 Age <= age_quantiles[3] ~ "75%", # 大于75%分位数的也归为75%桶,符合示例逻辑 TRUE ~ "75%" ))
逻辑说明
case_when()会按照条件书写顺序从上到下判断,满足第一个符合的条件就会返回对应标签,不会继续执行后续判断,逻辑完全匹配你的需求:
- 年龄≤39(25%分位数)→ 标签为
25% - 39<年龄≤58(50%分位数)→ 标签为
50% - 58<年龄≤78(75%分位数)→ 标签为
75% - 年龄>78 → 标签为
75%
运行后输出的Age_Bucket列和你给出的预期示例完全一致。
内容的提问来源于stack exchange,提问作者Eisen
相关产品推荐
相关产品推荐

