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

如何重组表格并调整表头?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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:29:57