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

如何按单列分组统计另一列特定值占比,有更高效的R实现方法吗?

高效实现方案

你原来的实现需要多次拆分数据集、分组计算再关联,大数据量下会产生大量不必要的性能开销。只需要一次分组即可完成计算,核心逻辑是利用R中逻辑值的数值属性(TRUE对应1,FALSE对应0),对cyl == 6的判断结果求均值,就是该取值在分组内的占比:

library(dplyr)

# 示例数据准备(修正原group列赋值的不规范写法,避免长度不匹配的隐式循环风险)
dat <- mtcars %>% 
  filter(cyl >=6) %>%
  mutate(group = rep(1:3, length.out = n()))

# 一步计算占比
cyl_data <- dat %>%
  group_by(group) %>%
  summarise(
    six_cyl_prop = mean(cyl == 6),
    .groups = "drop"
  )

如果需要同时保留两个取值的计数,也可以在同一次分组中完成:

cyl_data <- dat %>%
  group_by(group) %>%
  summarise(
    count_6 = sum(cyl == 6),
    count_8 = sum(cyl == 8),
    six_cyl_prop = count_6/(count_6 + count_8),
    .groups = "drop"
  )

以上方案仅对数据集做1次遍历分组计算,没有多余的拆分、关联操作,性能远高于你当前的实现,数据量级越大优势越明显。

如果你的数据集规模极大,还可以使用data.table实现进一步的性能提升:

library(data.table)
# 转换为data.table格式
setDT(dat)
# 按group分组计算占比
cyl_data <- dat[, .(six_cyl_prop = mean(cyl == 6)), by = group]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:15:04