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

R语言按条件计算行中位数的实现方法

R语言按指定分组条件计算行中位数实现方法

需求说明:按Col1、Col2两个字段的取值组合分组,对每一组的Col3值计算中位数,将结果填充到该组所有行的Median字段中。

首先构造示例数据集:

# 构建示例数据框
df <- data.frame(
  Col1 = c("A", "B", "A", "A", "B", "B"),
  Col2 = c("x", "x", "y", "y", "x", "x"),
  Col3 = c(1, 2, 2, 3, 2, 1)
)

方法一:dplyr实现(代码可读性高,推荐日常使用)

加载dplyr包后按两个字段分组,直接在分组内调用mutate计算中位数即可,不需要手动逐行筛选匹配:

library(dplyr)

df <- df %>%
  group_by(Col1, Col2) %>% # 按Col1、Col2的组合分组
  mutate(Median = median(Col3)) %>% # 组内计算Col3中位数赋值给Median列
  ungroup() # 取消分组状态,避免后续操作受分组影响

方法二:base R实现(无需安装第三方包)

直接使用R内置的ave分组计算函数即可,不需要额外依赖:

df$Median <- ave(
  x = df$Col3, # 要计算的目标列
  df$Col1, df$Col2, # 分组依据字段
  FUN = median # 指定计算函数为中位数
)

结果核对

两种方法运行后得到的结果完全一致:

  • 分组A+x共1条记录,Col3值为1,中位数为1
  • 分组A+y共2条记录,Col3值为2、3,中位数为2.5
  • 分组B+x共3条记录,Col3值为2、2、1,排序后为1、2、2,中位数为2

最终输出的数据集如下:

Col1Col2Col3Median
Ax11.0
Bx22.0
Ay22.5
Ay32.5
Bx22.0
Bx12.0

小提示:如果需要调整偶数样本量时的中位数取值规则,可以给median函数传入type参数,比如median(Col3, type = 1)会在偶数样本时取较小的那个值,此时A+y分组的中位数会返回2。

内容的提问来源于stack exchange,提问作者Bahadır Ayan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:57:28