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

R语言三维列联表:按婚姻队列计算边际占比及导出ftable

解决方案

1. 将行列合计转换为各婚姻队列对应的百分比

你需要先按婚姻队列分组计算组内占比,再添加边际合计,代码如下:

# 生成三维频数表
freq_table <- xtabs(~MarriageCohort + HerEdu + HisEdu, data = mydata)

# 按婚姻队列计算组内百分比(转换为百分比格式)
pct_table <- prop.table(freq_table, margin = 1) * 100

# 添加妻子教育、丈夫教育的边际合计,以及队列内的总合计
three_table_pct <- addmargins(pct_table, margin = c(2, 3))

# 保留两位小数(可选)
three_table_pct <- round(three_table_pct, digits = 2)

# 用ftable展示结果
ftable(three_table_pct)

说明:

  • margin = 1 指定以第一个维度(MarriageCohort)为分组,计算组内各教育组合的占比
  • addmargins 的 margin = c(2,3) 会在妻子教育(第2维)和丈夫教育(第3维)维度添加合计行/列,每个队列的右下角合计值应为100(浮点误差可能略有偏差)

2. 为ftable添加标签并导出

基础ftable设置自定义标签

直接在ftable()中通过参数设置变量的显示标签:

# 生成带自定义标签的ftable
custom_ftable <- ftable(three_table_pct,
                        row.vars = list("婚姻队列" = "MarriageCohort", "妻子教育程度" = "HerEdu"),
                        col.vars = list("丈夫教育程度" = "HisEdu"))

print(custom_ftable)

美化并导出到文件(推荐用flextable包)

flextable 支持更灵活的样式调整和多格式导出,适合新手操作:

# 安装并加载包(首次使用需安装)
install.packages("flextable")
library(flextable)

# 将ftable转换为flextable对象,设置表头标签
flex_table <- as_flextable(custom_ftable) %>%
  set_header_labels(
    MarriageCohort = "婚姻队列",
    HerEdu = "妻子教育程度",
    HisEdu = "丈夫教育程度"
  ) %>%
  autofit() # 自动调整列宽适配内容

# 导出到Excel
save_as_xlsx(flex_table, path = "婚姻队列教育分布表.xlsx")

# 导出到Word
save_as_docx(flex_table, path = "婚姻队列教育分布表.docx")

如果需要导出为文本格式(如CSV),可以用基础函数:

write.table(custom_ftable, file = "婚姻队列教育分布表.csv", sep = ",", row.names = FALSE, quote = FALSE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:35:32