在R中如何按另一变量分组计算指定列的方差
R按分组计算方差的实现方法
首先你可以用如下代码构造和你提供的示例一致的数据框,实际使用时替换为你自己的数据集即可:
df <- data.frame( Id = rep(c(1,2,3,4), times = c(4,2,3,2)), intensity = c(11,9,6,7,4,6,8,8,9,3,6) )
方法1:基础R实现(无需安装额外包)
使用内置的aggregate函数直接完成分组统计:
var_by_id <- aggregate(intensity ~ Id, data = df, FUN = var)
输出结果中每行对应一个Id的intensity方差,若需要忽略缺失值计算,将函数参数改为FUN = function(x) var(x, na.rm = TRUE)即可。
方法2:dplyr实现(tidyverse生态常用)
代码可读性更高,是目前R数据分析的主流写法:
# 未安装dplyr请先执行 install.packages("dplyr") library(dplyr) var_by_id <- df %>% group_by(Id) %>% summarise(intensity_variance = var(intensity, na.rm = TRUE))
方法3:data.table实现(适合大数据量场景)
运算速度远高于前两种方法,适合超大数据集的分组统计需求:
# 未安装data.table请先执行 install.packages("data.table") library(data.table) # 将数据框转为data.table格式 setDT(df) var_by_id <- df[, .(intensity_variance = var(intensity, na.rm = TRUE)), by = Id]
内容的提问来源于stack exchange,提问作者Yufei
相关产品推荐
相关产品推荐

