在R语言中按组创建中位数上下分组的虚拟变量
R语言实现组内中位数分组的虚拟变量创建
需求说明
基于给定的数据框,按Y列分组,计算每组Z的中位数,生成两个虚拟变量:
A:当Z大于组内中位数时为1,否则为0B:当Z小于组内中位数时为1,否则为0
实现代码
首先构造原始数据:
# 构造原始数据框 df <- data.frame( X = 1:9, Y = c("b", "a", "a", "c", "b", "a", "a", "b", "a"), Z = c(3, 8, 7, 1, 6, 4, 9, 5, 4) )
使用dplyr包完成分组计算与虚拟变量生成:
library(dplyr) # 分组计算并生成虚拟变量 df_result <- df %>% group_by(Y) %>% mutate( # 计算每组Z的中位数 group_median = median(Z), # 生成A列:Z>组内中位数为1,否则0 A = ifelse(Z > group_median, 1, 0), # 生成B列:Z<组内中位数为1,否则0 B = ifelse(Z < group_median, 1, 0) ) %>% # 移除中间计算用的中位数列 select(-group_median) %>% # 取消分组状态 ungroup() # 输出结果 print(df_result)
结果验证
运行代码后输出的结果与期望完全一致:
# A tibble: 9 × 5 X Y Z A B <int> <chr> <dbl> <dbl> <dbl> 1 1 b 3 0 1 2 2 a 8 1 0 3 3 a 7 0 0 4 4 c 1 0 0 5 5 b 6 1 0 6 6 a 4 0 1 7 7 a 9 1 0 8 8 b 5 0 0 9 9 a 4 0 1
内容的提问来源于stack exchange,提问作者flâneur
相关产品推荐
相关产品推荐

