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

使用purrr::map计算分组后因子变量占比时遇错误求解决

解决方案

首先,报错的核心原因是**count()不能嵌套在summarise()中使用**,count()是dplyr的独立频数统计函数,而summarise()需要搭配n()这类聚合函数来计算分组内统计量。

以下是两种能实现需求的代码方案:

方法一:先统计频数再计算占比

library(purrr)
library(dplyr)

mtcars_list <- c("am","gear","carb")
mtcars$vs <- factor(mtcars$vs , levels=c('0', '1'))

map(mtcars_list, ~ mtcars %>%
      group_by(cyl, .data[[.x]], vs) %>%
      summarise(n = n(), .groups = "drop_last") %>%
      mutate(percent = (n / sum(n)) * 100) %>%
      ungroup())

方法二:用prop.table简化百分比计算

map(mtcars_list, ~ mtcars %>%
      group_by(cyl, .data[[.x]]) %>%
      summarise(
        vs_0_pct = prop.table(table(vs))["0"] * 100,
        vs_1_pct = prop.table(table(vs))["1"] * 100,
        .groups = "drop"
      ))

代码说明

  • 方法一:先按cyl、列表变量、vs三级分组统计数量,再在cyl+列表变量的分组内,计算每个vs水平占该分组总数的百分比。
  • 方法二:直接在分组内生成vs的频数表,通过prop.table转换为比例后乘以100得到百分比,结果会将vs的两个水平作为单独列展示。

两种方案都能输出你需要的结果:按cyl和列表中每个变量分组后,vs的0、1水平各自占分组总数的百分比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:12:01