如何从R语言的summary()结果表中提取均值?
提取指定列均值的简便方法
方法1:用dplyr直接批量计算均值(最推荐)
不需要先跑summary(),直接用dplyr的across函数批量对目标列计算均值,一步到位:
library(dplyr) # 批量计算指定列的均值(na.rm=TRUE用于处理缺失值,可按需调整) avg_minutes <- Activity %>% summarize(across(c(VeryActiveMinutes, FairlyActiveMinutes, LightlyActiveMinutes, SedentaryMinutes), mean, na.rm = TRUE)) # 查看结果 avg_minutes
方法2:从已有的summary结果中提取均值
如果已经生成了totalTime这个summary对象,可以把它转换成数据框后筛选均值行:
# 将summary结果转为结构化数据框 summary_df <- as.data.frame(totalTime) # 提取标注为"Mean"的行(即各列均值) avg_from_summary <- summary_df[summary_df$Var2 == "Mean", ] # 整理成易读的格式 result <- data.frame( 列名 = rownames(avg_from_summary), 均值 = avg_from_summary$Freq ) rownames(result) <- NULL result
方法3:用base R的colMeans函数
如果不想依赖dplyr,base R的colMeans也能快速计算多列均值:
# 先选择目标列,再计算列均值 selected_cols <- Activity[, c("VeryActiveMinutes", "FairlyActiveMinutes", "LightlyActiveMinutes", "SedentaryMinutes")] avg_minutes_base <- colMeans(selected_cols, na.rm = TRUE) # 转为数据框方便查看 as.data.frame(avg_minutes_base)
补充说明:你之前手动求和的方法失败,大概率是因为VeryActiveMinutes是向量而非数据框,若要继续用这种方式,应该写成sum(VeryActiveMinutes)/length(VeryActiveMinutes),但显然上面的批量方法更高效。
内容的提问来源于stack exchange,提问作者Oscar Yip
相关产品推荐
相关产品推荐

