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

如何用purrr按cyl分组计算mtcars各变量均值?

解决方法

你遇到的问题核心是:map_df(~mean(.x, na.rm = TRUE)) 里的 .x 是每个分组对应的完整数据框,而 mean() 直接接收数据框时,无法按预期生成各列均值的结构化结果,还会触发类型不兼容的错误。

正确的做法是,对每个分组的数据框,先遍历它的每一列(即单个变量),再对列向量应用 mean()。用purrr实现需要嵌套使用 map 函数:

  1. 先按 cyl 拆分数据集为列表(每个元素是对应cyl的子数据框):
library(purrr)
by_cyl <- split(mtcars, mtcars$cyl)
  1. 对每个子数据框,遍历所有列计算均值,再组合成结果数据框:
mean_by_cyl <- by_cyl %>% 
  map_df(~map_dbl(.x, mean, na.rm = TRUE), .id = "cyl")
  • map_dbl(.x, mean, na.rm = TRUE):遍历当前分组的子数据框 .x 的每一列,对列向量计算均值,返回一个数值向量
  • 外层的 map_df():将每个分组的均值向量组合成完整的数据框,.id = "cyl" 参数会自动添加分组标识列,方便区分不同cyl的结果

如果习惯结合dplyr使用,也可以用更直观的写法(本质还是调用purrr的逻辑):

library(dplyr)
library(purrr)

mtcars %>% 
  group_split(cyl) %>% 
  map_df(~summarize_all(.x, mean, na.rm = TRUE), .id = "cyl")

这样就能得到按cyl分组后,各变量的均值结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:13:21