如何基于mtcars数据框的cyl与gear唯一组合生成均值数据框及排障
问题解答
1. 创建包含cyl和gear唯一组合的mpg、disp平均值的数据框
分享两种实用实现方法:
方法一:基础R的aggregate函数
直接指定需聚合的变量,按cyl和gear分组计算均值:
# 生成包含分组均值的数据框 result_df <- aggregate(cbind(mpg, disp) ~ cyl + gear, data = mtcars, mean)
输出结果包含cyl、gear、mpg、disp四列,其中后两列对应分组的平均值。
方法二:dplyr包(tidyverse风格)
分组逻辑更直观,还能自定义均值列名:
library(dplyr) result_df <- mtcars %>% group_by(cyl, gear) %>% summarise(avg_mpg = mean(mpg), avg_disp = mean(disp), .groups = "drop")
.groups = "drop"用于取消分组状态,得到普通数据框。
2. 修复生成cyl、gear、avg_mpg数据框的问题
你当前代码aggregate(mpg~am*cyl, data=mtcars, mean)的核心问题是分组变量错误:你写的是am*cyl(按am和cyl组合分组),但实际需要的是cyl和gear的组合,修改分组部分即可解决:
正确基础R代码
avg_mpg_df <- aggregate(mpg ~ cyl + gear, data = mtcars, mean) # 可选:重命名列名更清晰 colnames(avg_mpg_df) <- c("cyl", "gear", "avg_mpg")
更直接的dplyr写法
library(dplyr) avg_mpg_df <- mtcars %>% group_by(cyl, gear) %>% summarise(avg_mpg = mean(mpg), .groups = "drop")
执行后就能得到包含cyl、gear、avg_mpg三列的数据框。
内容的提问来源于stack exchange,提问作者jazzmine
相关产品推荐
相关产品推荐

