如何在RMarkdown LaTeX PDF的datasummary中重命名变量
在datasummary中重命名变量的几种解决方法
其实datasummary(modelsummary包)是支持变量重命名的,以下是几种实用方案:
方法1:在公式中直接用label()指定别名
你可以在构建公式时,用label(原变量名, "自定义名称")替换原变量名,datasummary会自动显示自定义名称。修改你的代码如下:
library(modelsummary) library(glue) summary_vars <- as.formula(glue("label(any_prio, '任何优先级冲突') + label(any_prio_on, '任何优先级冲突(发生中)') + label(any_prio_off, '任何优先级冲突(已结束)') + label(war_prio, '战争优先级冲突') + label(war_prio_on, '战争优先级冲突(发生中)') + label(war_prio_off, '战争优先级冲突(已结束)') + label(war_col, '殖民战争') + label(war_inc, '国内战争(增量)') + label(war, '战争') + label(GPCP, '总降雨量') + label(GPCP_g, '降雨量增长率') + label(GPCP_g_l, '滞后降雨量增长率') + label(gdp_g, 'GDP增长率') + label(gdp_g_l, '滞后GDP增长率') + label(y_0, '初始GDP') + label(polity2l, '滞后政体得分') + label(polity2l_6, '滞后政体得分阈值') + label(deml, '滞后民主程度') + label(ethfrac, '族群分化度') + label(relfrac, '宗教分化度') + label(Oil, '石油出口占比') + label(mtnest, '山地占比') + label(lpopl1, '滞后人口对数') + label(tot_100_g, '贸易开放度') ~ mean*Arguments(na.rm = TRUE) + sd*Arguments(na.rm = TRUE) + N")) TableA1 <- datasummary(data = mss_rep, summary_vars, booktabs = T, fmt = 2, col.names = c("", "均值", "标准差", "观测数"), caption = "描述性统计") |> kable_styling() |> pack_rows("A. 国内冲突指标(1981–99)", 1, 9) |> pack_rows("B. 降雨量指标(1981–99)", 10, 12) |> pack_rows("C. 经济增长", 13, 14) |> pack_rows("D. 国家特征", 15, 24) TableA1
方法2:给数据框变量添加标签属性
先给数据集的变量设置label属性,datasummary会自动读取这些标签作为显示名称,无需修改原公式:
library(labelled) # 批量设置变量标签 var_label(mss_rep) <- list( any_prio = "任何优先级冲突", any_prio_on = "任何优先级冲突(发生中)", any_prio_off = "任何优先级冲突(已结束)", war_prio = "战争优先级冲突", GPCP = "总降雨量", gdp_g = "GDP增长率", # 其他变量按此格式依次添加 polity2l = "滞后政体得分", ethfrac = "族群分化度" ) # 之后直接运行你原来的代码即可 summary_vars <- as.formula(glue("any_prio + any_prio_on + any_prio_off + war_prio + war_prio_on + war_prio_off + war_col + war_inc + war + GPCP + GPCP_g + GPCP_g_l + gdp_g + gdp_g_l + y_0 + polity2l + polity2l_6 + deml + ethfrac + relfrac + Oil + mtnest + lpopl1 + tot_100_g ~ mean*Arguments(na.rm = TRUE) + sd*Arguments(na.rm = TRUE) + N")) TableA1 <- datasummary(data = mss_rep, summary_vars, booktabs = T, fmt = 2, col.names = c("", "均值", "标准差", "观测数"), caption = "描述性统计") |> kable_styling() |> pack_rows("A. 国内冲突指标(1981–99)", 1, 9) |> pack_rows("B. 降雨量指标(1981–99)", 10, 12) |> pack_rows("C. 经济增长", 13, 14) |> pack_rows("D. 国家特征", 15, 24) TableA1
方法3:用datasummary_df自定义输出
如果需要更灵活的控制,可以先计算统计量得到数据框,手动修改变量名后再生成表格:
# 先计算统计量 stats_df <- datasummary_df( formula = any_prio + any_prio_on + any_prio_off + war_prio + war_prio_on + war_prio_off + war_col + war_inc + war + GPCP + GPCP_g + GPCP_g_l + gdp_g + gdp_g_l + y_0 + polity2l + polity2l_6 + deml + ethfrac + relfrac + Oil + mtnest + lpopl1 + tot_100_g ~ mean*Arguments(na.rm = TRUE) + sd*Arguments(na.rm = TRUE) + N, data = mss_rep, fmt = 2 ) # 手动修改变量名称(按顺序对应) stats_df$variable <- c( "任何优先级冲突", "任何优先级冲突(发生中)", "任何优先级冲突(已结束)", "战争优先级冲突", "战争优先级冲突(发生中)", "战争优先级冲突(已结束)", "殖民战争", "国内战争(增量)", "战争", "总降雨量", "降雨量增长率", "滞后降雨量增长率", "GDP增长率", "滞后GDP增长率", "初始GDP", "滞后政体得分", "滞后政体得分阈值", "滞后民主程度", "族群分化度", "宗教分化度", "石油出口占比", "山地占比", "滞后人口对数", "贸易开放度" ) # 生成表格 TableA1 <- datasummary_df(stats_df, booktabs = T, col.names = c("", "均值", "标准差", "观测数"), caption = "描述性统计") |> kable_styling() |> pack_rows("A. 国内冲突指标(1981–99)", 1, 9) |> pack_rows("B. 降雨量指标(1981–99)", 10, 12) |> pack_rows("C. 经济增长", 13, 14) |> pack_rows("D. 国家特征", 15, 24) TableA1
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

