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

聚合连续变量:在R中按Rate1四分位数计算Rate2均值的方法

在R中按Rate1的四分位数区间计算Rate2的平均值

嘿,这个需求在R里其实挺常见的,我给你两种常用的实现方式,你可以根据自己的习惯选:

方法一:用Base R实现

假设你的数据框叫df,包含Rate1和Rate2两个列,步骤如下:

  • 先计算Rate1的四分位数分割点,包含0和100百分位,确保所有数据都能分到区间里:
    q <- quantile(df$Rate1, probs = c(0, 0.25, 0.5, 0.75, 1), na.rm = TRUE)
    
  • 给数据框新增一列,标记每条观测属于哪个四分位数区间:
    df$Rate1_quartile <- cut(
      df$Rate1,
      breaks = q,
      include.lowest = TRUE,  # 确保最小值被包含在第一个区间
      labels = c("0-25百分位", "26-50百分位", "51-75百分位", "76-100百分位")
    )
    
  • 最后用aggregate函数按分组计算Rate2的平均值:
    result <- aggregate(Rate2 ~ Rate1_quartile, data = df, FUN = function(x) mean(x, na.rm = TRUE))
    

方法二:用tidyverse(dplyr)实现

如果你习惯用tidyverse的管道语法,代码会更简洁流畅:

  • 先确保你装了dplyr包(没装的话先跑install.packages("dplyr")),然后加载它:
    library(dplyr)
    
  • 用管道操作一气呵成:
    result <- df %>%
      # 新增四分位数分组列
      mutate(
        Rate1_quartile = cut(
          Rate1,
          breaks = quantile(Rate1, probs = c(0, 0.25, 0.5, 0.75, 1), na.rm = TRUE),
          include.lowest = TRUE,
          labels = c("0-25百分位", "26-50百分位", "51-75百分位", "76-100百分位")
        )
      ) %>%
      # 按分组聚合
      group_by(Rate1_quartile) %>%
      summarise(Mean_Rate2 = mean(Rate2, na.rm = TRUE))  # 计算均值,同时处理NA值
    

小提示

  • 记得加上na.rm = TRUE参数,不然如果Rate2里有缺失值,结果会变成NA;
  • 如果你的Rate1有重复的极值,include.lowest = TRUE能保证这些值不会被排除在区间外;
  • 要是你想让每个分组的观测数量尽量相等,可以试试ntile()函数代替cut(),比如Rate1_quartile = ntile(Rate1, 4),不过这种方式的区间是按数量分,不是按数值百分位哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:31:35