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

如何在R语言中制作双分类列频数表并优化分组显示?

嗨,我来帮你解决这两个关于R语言分类变量频数表的问题!

一、制作包含两个分类列的频数表

这里有几个实用的方法,你可以根据自己的需求来选:

1. 基础R的table()函数

这是最直接的方式,适合快速查看交叉频数:

# 生成频数矩阵
freq_matrix <- table(df$MIPS_Group, df$WES_Cohort)
# 转成数据框格式(方便后续处理)
freq_df <- as.data.frame.matrix(freq_matrix)

它会返回一个矩阵,行对应MIPS_Group的所有唯一值,列对应WES_Cohort的唯一值,单元格就是两个分类组合的频数。

2. dplyr的count()方法(你当前在用的)

这种方式灵活性很高,能直接生成带频数的数据框,还能轻松添加百分比:

library(dplyr)
long_freq_df <- df %>%
  count(MIPS_Group, WES_Cohort, name = "Frequency") %>% # 自定义频数列的名字
  arrange(desc(Frequency)) %>% # 按频数降序排列
  mutate(Overall_Percentage = Frequency / sum(Frequency)) # 计算整体占比

得到的是长格式表格,每个MIPS_Group和WES_Cohort的组合单独占一行。

3. janitor包的tabyl()(强烈推荐!)

这个包专门用来做整洁的统计表格,能一键生成带行/列总计和百分比的交叉表:

library(janitor)
# 生成基础交叉频数表
clean_freq_table <- tabyl(df, MIPS_Group, WES_Cohort)
# 美化表格:添加百分比、总计,同时显示频数和百分比
clean_freq_table <- clean_freq_table %>%
  adorn_percentages("row") %>% # 按行计算百分比,可选"col"(列占比)或"all"(整体占比)
  adorn_pct_formatting(digits = 1) %>% # 百分比保留1位小数
  adorn_totals(c("row", "col")) %>% # 添加行和列的总计行/列
  adorn_ns(position = "front") # 把频数放在百分比前面,格式比如"10 (25.0%)"

输出的表格非常直观,直接就能用来写报告。

二、优化成MIPS_Group唯一值仅出现一次的格式

你现在的代码生成的是长格式,每个分类组合都会重复MIPS_Group的值。要实现每个MIPS_Group只出现一次,我们需要把表格转成宽格式,用tidyr包的pivot_wider()就能轻松做到:

方法1:转成宽格式(统计结果清晰展示)

library(tidyr)

# 先计算好长格式的统计数据
long_stats <- df %>%
  count(MIPS_Group, WES_Cohort, name = "Frequency") %>%
  arrange(desc(Frequency)) %>%
  mutate(Overall_Percentage = Frequency / sum(Frequency))

# 转换为宽格式
wide_stats <- long_stats %>%
  pivot_wider(
    id_cols = MIPS_Group, # 用这个列作为行的唯一标识
    names_from = WES_Cohort, # 把这个分类变量的每个水平转成列
    values_from = c(Frequency, Overall_Percentage), # 要填充到列里的数值
    names_sep = "_" # 列名的分隔符,比如"CohortA_Frequency"
  )

这样每个MIPS_Group会单独占一行,列则是每个WES_Cohort对应的频数和百分比,完全符合你要的“唯一值仅出现一次”的要求。

方法2:输出时合并单元格(适合可视化报告)

如果你希望在输出表格(比如HTML或PDF)时,让相同的MIPS_Group单元格合并显示,看起来更整洁,可以用kableExtra包来美化:

library(kableExtra)

wide_stats %>%
  kbl(caption = "MIPS分组与WES队列的频数统计") %>% # 添加表格标题
  kable_styling(bootstrap_options = "striped", full_width = FALSE) %>%
  collapse_rows(columns = 1, valign = "middle") # 合并第一列相同值的单元格

这样第一列的MIPS_Group唯一值只会显示一次,表格的可读性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:41:23