You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用case_when结合Flag=1时Z的中位数创建分类变量?

用case_when实现分类变量NewCol的生成

核心思路

先计算Flag=1分组下Z的中位数,再通过case_when按规则匹配分类结果。

方案一:高效实现(推荐)

先一次性计算中位数并存储为临时列,再用该列做判断,避免重复计算:

library(dplyr)

# 假设数据集名为df
df <- df %>%
  # 计算Flag=1对应的Z的中位数,生成临时列
  mutate(flag1_z_median = median(Z[Flag == 1], na.rm = TRUE)) %>%
  # 按规则生成NewCol
  mutate(NewCol = case_when(
    Flag == 2 ~ "Flag2",
    Flag == 1 & Z >= flag1_z_median ~ "GT EQ Median",
    Flag == 1 & Z < flag1_z_median ~ "LT Median",
    # 处理其他未匹配的Flag值(按需调整)
    TRUE ~ NA_character_
  )) %>%
  # 移除临时中位数列(可选)
  select(-flag1_z_median)

方案二:简化写法(适合小数据集)

直接在case_when中嵌入中位数计算,代码更简洁但会重复计算中位数,大数据集效率较低:

library(dplyr)

df <- df %>%
  mutate(NewCol = case_when(
    Flag == 2 ~ "Flag2",
    Flag == 1 & Z >= median(Z[Flag == 1], na.rm = TRUE) ~ "GT EQ Median",
    Flag == 1 & Z < median(Z[Flag == 1], na.rm = TRUE) ~ "LT Median",
    TRUE ~ NA_character_
  ))

注意事项

  • 加上na.rm = TRUE是为了忽略Z列中的缺失值,避免中位数计算报错,可根据实际数据情况调整。
  • 如果数据中存在Flag既不是1也不是2的情况,最后一行TRUE ~ NA_character_会将这些行的NewCol设为缺失值,可根据需求修改默认值。

内容的提问来源于stack exchange,提问作者Emily Fassbender

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:03:12