如何在R语言中创建观测数量的汇总统计表格?
用R语言生成观测数量的汇总统计表格
这里整理了几种实用方法,附代码和结果示例,所有示例基于下面的模拟数据集:
set.seed(123) df <- data.frame( 性别 = sample(c("男", "女"), 100, replace = TRUE), 年龄组 = sample(c("青年", "中年", "老年"), 100, replace = TRUE), 疾病状态 = sample(c("患病", "未患病"), 100, replace = TRUE) )
方法1:Base R 基础统计
单变量观测数统计
用table()生成频数表后转成数据框,方便格式化:
gender_count <- as.data.frame(table(df$性别)) colnames(gender_count) <- c("性别", "观测数量") gender_count
输出结果表格:
| 性别 | 观测数量 |
|---|---|
| 男 | 47 |
| 女 | 53 |
多变量交叉观测数统计
用xtabs()生成交叉频数表,适合看分组交叉的观测分布:
cross_count <- as.data.frame(xtabs(~性别 + 疾病状态, data = df)) colnames(cross_count) <- c("性别", "疾病状态", "观测数量") cross_count
输出结果表格:
| 性别 | 疾病状态 | 观测数量 |
|---|---|---|
| 男 | 患病 | 22 |
| 女 | 患病 | 27 |
| 男 | 未患病 | 25 |
| 女 | 未患病 | 26 |
方法2:dplyr 灵活分组统计
如果你需要自定义分组逻辑,dplyr的分组+汇总操作更灵活:
library(dplyr) group_count <- df %>% group_by(年龄组, 性别) %>% summarise(观测数量 = n(), .groups = "drop") group_count
输出结果表格:
| 年龄组 | 性别 | 观测数量 |
|---|---|---|
| 青年 | 男 | 16 |
| 青年 | 女 | 18 |
| 中年 | 男 | 15 |
| 中年 | 女 | 17 |
| 老年 | 男 | 16 |
| 老年 | 女 | 18 |
方法3:tableone 生成专业汇总表
如果是科研或医学场景,tableone能生成带百分比的标准化汇总表:
library(tableone) # 指定需要统计的分类变量 vars <- c("性别", "年龄组", "疾病状态") table_one <- CreateTableOne(vars = vars, data = df, factorVars = vars) # 转成数据框并提取关键列 table_one_df <- as.data.frame(print(table_one, printToggle = FALSE)) table_one_df <- table_one_df[, c("n", "percent")] colnames(table_one_df) <- c("观测数量", "百分比") table_one_df
输出结果表格:
| 观测数量 | 百分比 | |
|---|---|---|
| 性别:男 | 47 | 47.0% |
| 性别:女 | 53 | 53.0% |
| 年龄组:青年 | 34 | 34.0% |
| 年龄组:中年 | 32 | 32.0% |
| 年龄组:老年 | 34 | 34.0% |
| 疾病状态:患病 | 49 | 49.0% |
| 疾病状态:未患病 | 51 | 51.0% |
内容的提问来源于stack exchange,提问作者Nova
相关产品推荐
相关产品推荐

