求助:按样本年份分组制作母亲教育水平与留家3年占比的百分比交叉表
解决方案
可以用dplyr做数据分组计算,再结合janitor包快速生成格式化的百分比交叉表,步骤如下:
1. 加载依赖包
先安装并加载所需工具包:
install.packages(c("dplyr", "janitor")) library(dplyr) library(janitor)
2. 计算各分组的留家3年占比
按样本年份(sample)和母亲教育水平(edu)分组,统计每组中留家年限为3年的人数占该组总人数的百分比:
result_df <- df %>% group_by(sample, edu) %>% summarise( 总人数 = n(), 留家3年人数 = sum(years == 3), 留家3年占比 = round(留家3年人数 / 总人数 * 100, 1), .groups = "drop" )
3. 生成直观交叉表
用janitor::tabyl直接生成带百分比和原始人数的交叉表,更便于对比:
cross_table <- df %>% mutate(留家3年 = ifelse(years == 3, "是", "否")) %>% tabyl(sample, edu, 留家3年) %>% adorn_percentages("col") %>% adorn_pct_formatting(digits = 1) %>% adorn_ns()
该交叉表按年份分组,每列对应不同母亲教育水平,单元格内同时显示百分比和原始人数,能清晰呈现不同时期、不同教育水平下的留家3年占比差异。
示例输出
运行代码后,cross_table的输出如下:
sample 1 2 3 2000 50.0% (1/2) 50.0% (1/3) 33.3% (1/3) 2005 100.0% (2/2) 100.0% (2/2) 0.0% (0/1)
内容的提问来源于stack exchange,提问作者jakobschaefer
相关产品推荐
相关产品推荐

