如何用R语言生成含计数、百分比及均值的汇总报告?
R语言计算因子变量的百分比与均值方法
1. 基于summary结果计算百分比
你已经用summary(EEB$PBDplanet_import)拿到了各因子水平的计数,直接结合总样本量就能算出百分比:
# 提取各水平计数 factor_counts <- summary(EEB$PBDplanet_import) # 计算百分比(保留2位小数) factor_pct <- round(factor_counts / nrow(EEB) * 100, 2) # 合并计数与百分比展示 cbind(计数 = factor_counts, 百分比 = paste0(factor_pct, "%"))
2. 用table+prop.table快速生成百分比表
table函数更直观生成频数表,搭配prop.table直接转换为比例:
# 生成频数表 freq_table <- table(EEB$PBDplanet_import) # 转换为百分比 pct_table <- prop.table(freq_table) * 100 # 合并输出 cbind(频数 = freq_table, 百分比 = round(pct_table, 2))
3. 计算因子变量的均值
因子变量无法直接计算均值,需要先转换为数值型(前提是因子水平具备数值意义,比如"0"/"1"或有序分类):
- 如果因子水平是字符串形式的数字(如"0"、"1"):
# 先转字符再转数值,避免因子水平自动编码为1、2... EEB$PBD_num <- as.numeric(as.character(EEB$PBDplanet_import)) # 计算均值(忽略缺失值) mean_val <- mean(EEB$PBD_num, na.rm = TRUE) cat("均值:", round(mean_val, 2), "\n")
- 如果是有序分类(如"低"/"中"/"高"),手动映射数值:
# 需要先加载dplyr包 library(dplyr) EEB$PBD_num <- recode(EEB$PBDplanet_import, "低"=1, "中"=2, "高"=3) mean_val <- mean(EEB$PBD_num, na.rm = TRUE) cat("均值:", round(mean_val, 2), "\n")
4. 用dplyr一键生成完整描述统计
如果需要批量生成统计结果,dplyr的分组统计更高效:
# 未安装dplyr先执行:install.packages("dplyr") library(dplyr) EEB %>% # 转换因子为数值 mutate(PBD_num = as.numeric(as.character(PBDplanet_import))) %>% # 按因子水平分组 group_by(PBDplanet_import) %>% summarise( 计数 = n(), 百分比 = round(n() / nrow(EEB) * 100, 2), 组内均值 = mean(PBD_num, na.rm = TRUE) ) %>% # 添加整体统计行 add_row( PBDplanet_import = "整体", 计数 = nrow(EEB), 百分比 = 100, 组内均值 = mean(.$PBD_num, na.rm = TRUE) )
内容的提问来源于stack exchange,提问作者Erin Bergquist
相关产品推荐
相关产品推荐

