如何重组表格并调整表头?R语言数据框宽表转换问题
解决方法
要实现将年份设为列、年龄分类设为行,且每个年份列同时展示频数(Frequency)和百分比(%)的需求,你可以先把这两个指标合并成一个字符串列,再进行宽表重塑,具体步骤如下:
1. 构造示例数据(可替换为你的原始数据)
library(tidyverse) df <- tibble( Year = rep(2011:2022, each = 3), Variable = rep(c("<5岁", "5-10岁", ">10岁"), 12), Frequency = sample(100:500, 36), `%` = round(runif(36, 10, 40), 1) )
2. 合并指标并重塑宽表
先将Frequency和%合并为一个包含两者信息的字符串列,再用pivot_wider完成宽表转换:
df_wide <- df %>% # 合并频数与百分比,格式为"频数(百分比%)" mutate(combined = paste0(Frequency, " (", `%`, "%)")) %>% pivot_wider( id_cols = Variable, # 行:年龄分类 names_from = Year, # 列:年份 values_from = combined # 单元格内容:合并后的指标 )
这样得到的df_wide就是你需要的结构:行是年龄分类,列是2011-2022各年份,每个单元格同时展示对应年份的频数和百分比,不会出现拆分的独立列。
3. 用KableExtra生成论文表格
基于重塑后的宽表,直接用KableExtra美化输出:
library(kableExtra) df_wide %>% kbl(caption = "各年龄组年度频数及占比分布", align = "c") %>% kable_styling( bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE, position = "left" ) %>% column_spec(1, bold = TRUE, border_right = TRUE)
为什么之前的pivot_wider会拆分列?
因为你的原始数据包含Frequency和%两个值列,pivot_wider默认会对每个值列单独按年份展开,所以会生成frequency_2011、%_2011这类拆分列。合并成单一值列后,就能确保每个年份只对应一列,符合论文表格的展示需求。
内容的提问来源于stack exchange,提问作者Julia_MOura
相关产品推荐
相关产品推荐

