如何按aid分组获取time的中位数?附R语言数据示例
按aid分组计算time中位数的两种R实现方法
嘿,这有两种实用的方法可以帮你实现需求,不管你习惯用基础R还是tidyverse工具链都能轻松搞定:
方法一:使用基础R的aggregate()函数
这是无需额外安装包的原生解决方案,步骤很直接:
# 先创建你的原始数据框 df <- data.frame(aid = c(1,2,1,2), time = c(3,1,4,1)) # 按aid分组计算time的中位数 median_result <- aggregate(time ~ aid, data = df, FUN = median) # 重命名列名以匹配你的期望输出 colnames(median_result) <- c("aid", "time_median") # 查看结果 median_result
运行后会输出你想要的结果:
aid time_median 1 1 3.5 2 2 1.0
方法二:使用dplyr包(tidyverse生态)
如果你平时习惯用tidyverse的语法,这种链式操作会更直观:
# 先加载dplyr包(如果没安装先运行install.packages("dplyr")) library(dplyr) # 创建原始数据框 df <- data.frame(aid = c(1,2,1,2), time = c(3,1,4,1)) # 分组计算中位数 median_result <- df %>% group_by(aid) %>% # 按aid分组 summarise(time_median = median(time)) %>% # 计算每组的中位数并命名 ungroup() # 可选,取消分组状态,让结果回到普通数据框 # 查看结果 median_result
这个方法的输出和上面完全一致,写法更符合现代R的数据分析风格。
内容的提问来源于stack exchange,提问作者foc
相关产品推荐
相关产品推荐

