如何简便生成含百分比列的多组特定变量组合频数表?
生成带百分比的交叉频数表(R语言实现)
先确认我们的数据集:
set.seed(505) df = data.frame(age_group = c(1,2,1,1,1,1,1,2,2,2,2,3,3,2,1,2,3), score = trunc(runif(17,0,5)), sex = trunc(runif(17,0,2)), FO1 = trunc(runif(17,0,2)), FN2 = trunc(runif(17,0,2)), AL3 = trunc(runif(17,0,2)), PM4 = trunc(runif(17,0,2)))
我们需要为FO1、FN2、AL3、PM4这几个变量,分别与age_group、score生成带百分比的交叉频数表,排除sex变量。下面提供两种实现方式:
方法一:基础R原生实现
先定义要组合的变量组,再循环生成所有组合的频数表及对应百分比:
# 定义待分析的变量组 target_vars <- c("FO1", "FN2", "AL3", "PM4") cross_vars <- c("age_group", "score") # 循环遍历所有变量组合,生成频数表和百分比 for (var in target_vars) { for (cross_var in cross_vars) { cat("\n=== ", var, "与", cross_var, "的交叉频数表 ===\n") # 基础频数表 tbl <- table(df[[var]], df[[cross_var]]) print(tbl) cat("\n行百分比(按", var, "分组,每行合计100%):\n") print(prop.table(tbl, margin = 1) * 100, digits = 2) cat("\n列百分比(按", cross_var, "分组,每列合计100%):\n") print(prop.table(tbl, margin = 2) * 100, digits = 2) } }
prop.table(tbl, margin = 1):计算行百分比,以每个FO1/FN2等变量的分组为基准prop.table(tbl, margin = 2):计算列百分比,以每个age_group/score的分组为基准digits = 2:控制百分比保留两位小数
方法二:用janitor包生成美观的格式化表格
janitor包能快速生成带频数和百分比的交叉表,格式更规整:
# 安装并加载janitor包(首次使用需安装) if (!require(janitor)) install.packages("janitor") library(janitor) # 循环生成所有变量组合的格式化交叉表 for (var in target_vars) { for (cross_var in cross_vars) { cat("\n=== ", var, "与", cross_var, "的交叉频数表(含百分比) ===\n") # 生成带行百分比的表格(频数+百分比) print(tabyl(df, !!sym(var), !!sym(cross_var)) %>% adorn_percentages("row") %>% adorn_pct_formatting(digits = 2) %>% adorn_ns()) } }
- 如果需要列百分比,把
adorn_percentages("row")改成adorn_percentages("col")即可 adorn_ns():保留原始频数,让表格同时显示数量和百分比
内容的提问来源于stack exchange,提问作者An116
相关产品推荐
相关产品推荐

