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

多列分组汇总统计:dataframe、data.table与dplyr实现对比

泰坦尼克号数据分组汇总:base R与dplyr实现

以下是对应data.table分组汇总逻辑的base R和dplyr实现方案,先确保数据已读取为data.frame:

# 读取泰坦尼克号数据
titanic <- read.csv("titanic5.csv")

首先定义通用的辅助函数(和原案例一致,用于处理NA):

# 计算忽略NA的均值(0/1变量均值即为1的占比)
mn <- function(x) mean(x, na.rm = TRUE)
# 统计非NA值的数量
Nna <- function(x) sum(!is.na(x))

base R实现

按sex单变量分组汇总

使用aggregate函数实现分组计算,需展平返回的矩阵列以得到整洁的结果:

# 分组计算
agg_sex <- aggregate(survived ~ sex, data = titanic, FUN = function(x) c(Proportion = mn(x), N = Nna(x)))
# 转换为标准data.frame格式
agg_sex_flat <- do.call(data.frame, agg_sex)
colnames(agg_sex_flat) <- c("sex", "Proportion", "N")

# 查看结果
agg_sex_flat

按sex+class多变量分组汇总

逻辑与单分组一致,仅需修改分组变量:

# 多分组计算
agg_sex_class <- aggregate(survived ~ sex + class, data = titanic, FUN = function(x) c(Proportion = mn(x), N = Nna(x)))
# 转换为标准data.frame格式
agg_sex_class_flat <- do.call(data.frame, agg_sex_class)
colnames(agg_sex_class_flat) <- c("sex", "class", "Proportion", "N")

# 查看结果
agg_sex_class_flat

dplyr实现

先加载dplyr包,使用group_by+summarise的管道语法实现分组汇总:

library(dplyr)

按sex单变量分组汇总

titanic %>%
  group_by(sex) %>%
  summarise(
    Proportion = mn(survived),
    N = Nna(survived),
    .groups = "drop"  # 取消分组状态,返回普通data.frame
  )

按sex+class多变量分组汇总

titanic %>%
  group_by(sex, class) %>%
  summarise(
    Proportion = mn(survived),
    N = Nna(survived),
    .groups = "drop"
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:25:06