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

如何在R中为mtcars数据集按am变量分组计算多变量频率百分比?

解决方法

原代码用的是基础R的apply,没法直接加dplyr::group_by——两者属于不同的代码范式,搭不上。要实现按am分层生成多个分类变量的频率表,用tidyverse工具组合更顺手,给你两种可行方案:

方案一:dplyr分组+跨列处理

先加载tidyverse,把目标变量转成因子(保证分类逻辑正确),再按am分组后批量计算每个变量的百分比频率:

library(tidyverse)

mtcars %>%
  mutate(across(c(cyl, gear, carb), factor)) %>%
  group_by(am) %>%
  summarise(
    across(c(cyl, gear, carb), ~ {
      tbl <- table(.x, useNA = "always")
      prop.table(tbl) * 100
    })
  )

运行后会得到按am分组的结果,每个分组下对应cyl、gear、carb各自的百分比频率表。

方案二:转成长格式统一处理(输出更整洁)

如果想要更易读的表格形式,可以先把数据转成长格式,再分组计算:

library(tidyverse)

mtcars %>%
  mutate(am = factor(am, labels = c("自动", "手动"))) %>%  # 给am加标签更直观
  pivot_longer(cols = c(cyl, gear, carb), names_to = "变量", values_to = "取值") %>%
  group_by(am, 变量) %>%
  count(取值, .drop = FALSE) %>%  # 保留所有可能取值,包括NA
  mutate(百分比 = n / sum(n) * 100) %>%
  ungroup()

这种输出是长表格,每行对应一个am分组、一个变量、一个取值,以及对应的计数和百分比,方便后续查看或可视化。

补充说明

你原来的apply是逐列遍历数据框的基础R函数,而group_by是dplyr里的分组工具,需要配合管道(%>%)和tidy风格的函数使用,两者逻辑不兼容,所以没法直接在原代码里插入group_by语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:13:23