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
相关产品推荐
相关产品推荐

