R 将多个汇总表与子目合并
我有几个人口统计因素的数据 我正在尝试创建一个出版物质量汇总表,如下所示:R 将多个汇总表与子目合并,r,r-markdown,R,R Markdown,我有几个人口统计因素的数据 我正在尝试创建一个出版物质量汇总表,如下所示: N Sex M 150 F 150 Marital Status Single 100 Married 100 Divorced 100 Age <25 75 25-34
N
Sex
M 150
F 150
Marital Status
Single 100
Married 100
Divorced 100
Age
<25 75
25-34 75
35-44 75
>= 45 75
但我找不到一种方法将它们组合成一个单独的表格,每个类别都有一个副标题。单独的表格有不同的列宽,手动对齐并插入中间的子目行(在raw LaTeX中?)似乎是一个糟糕的解决方案
这是一种非常常见的报告格式——许多期刊文章的标准表1——我想找到一个创建它的通用解决方案。这不是一个完整的解决方案,但一个很好的起点可能是软件包
库(pander)
pander(列表(`Age groups`=年龄组,`Sex`=性别,`MULTINAL`=婚姻))
#
#
#***年龄组**:
#
# ---------------
#年龄组
# ----------- ---
# = 55 1
#
# 25-34 1
#
# 35-44 1
#
# 45-54 1
# ---------------
#
#***性别**:
#
# ---------
#性别
# ----- ---
#f2
#
#M3
# ---------
#
#***婚姻**:
#
# --------------
#婚姻的
# ---------- ---
#离婚1
#
#已婚1
#
#单曲3
# --------------
#
#
#
#
#
第一个输出:
第二输出:
我遇到了同样的问题,在用组标签添加空行之后,我偶然发现了kableExtra::group_rows选项 通过这种方式,您可以对表中的某些行进行分组并给它们一个标签 在这里添加这些答案是因为我在三年后发现了这个问题,也许有人可以从中受益
require(dplyr)
dd <- data.frame(barcode = c("16929", "64605", "03086", "29356", "23871"),
sex = factor(c("M", "F", "M", "F", "M")),
marital = factor(c("Married", "Single", "Single", "Single", "Divorced")),
age_group = factor(c("<25", "25-34", "35-44", "45-54", ">= 55")))
require(dplyr)
age_groups <- dd %>%
group_by(age_group) %>%
count() %>%
rename(variable = age_group) %>%
ungroup
sex <- dd %>%
group_by(sex) %>%
count() %>%
rename(variable = sex)%>%
ungroup
marital <- dd %>%
group_by(marital) %>%
count() %>%
rename(variable = marital)%>%
ungroup
freq_table <- age_groups %>%
add_row(sex) %>%
add_row(marital)
knitr::kable(freq_table) %>%
kableExtra::group_rows(group_label = "Age groups", start_row = 1, end_row = 5) %>%
kableExtra::group_rows(group_label = "Sex", start_row = 6, end_row = 7) %>%
kableExtra::group_rows(group_label = "Marital status", start_row = 8, end_row = 10)
require(dplyr)
dd%
计数()%>%
重命名(变量=年龄组)%>%
解组
性别%
按性别划分的组别%>%
计数()%>%
重命名(变量=性别)%>%
解组
婚姻%
组别(婚姻)%>%
计数()%>%
重命名(变量=婚姻)%>%
解组
频率表%
添加_行(性别)%%>%
添加_行(婚姻)
knitr::kable(频率表)%>%
kableExtra::组行(组标签=“年龄组”,开始行=1,结束行=5)%>%
kableExtra::组行(组标签=“性别”,开始行=6,结束行=7)%>%
kableExtra::组行(组标签=“婚姻状况”,开始行=8,结束行=10)
不幸的是,我不能直接在这里添加图像,因为我还没有足够的声誉。我通常的解决方案是将这些值放入一个矩阵中,其中的行和列名符合我在表中想要的,NA值符合我想要的空格。然后,我使用同名包中的
xtable
构建一个Latex表。关于如何让它跨越多行的帖子太多了,但要开始工作可能有点棘手。
require(knitr)
kable(age_groups)
kable(sex)
kable(marital)
library(pander)
pander(list(`Age groups` = age_groups, `Sex` = sex, `Marital` = marital))
#
#
# * **Age groups**:
#
# ---------------
# age_group n
# ----------- ---
# <25 1
#
# >= 55 1
#
# 25-34 1
#
# 35-44 1
#
# 45-54 1
# ---------------
#
# * **Sex**:
#
# ---------
# sex n
# ----- ---
# F 2
#
# M 3
# ---------
#
# * **Marital**:
#
# --------------
# marital n
# ---------- ---
# Divorced 1
#
# Married 1
#
# Single 3
# --------------
#
#
# <!-- end of list -->
#
#
library(expss)
library(knitr)
dd = data.frame(barcode = c("16929", "64605", "03086", "29356", "23871"),
sex = factor(c("M", "F", "M", "F", "M")),
marital = factor(c("Married", "Single", "Single", "Single", "Divorced")),
age_group = factor(c("<25", "25-34", "35-44", "45-54", ">= 55"),
levels = c("<25", "25-34", "35-44", "45-54", ">= 55")))
dd %>% tab_cells("Sex" = sex, "Marital status" = marital, "Age" = age_group) %>%
tab_cols(total(label = "N")) %>%
tab_stat_cases(total_row_position = "none") %>%
tab_pivot()
dd %>% tab_cells("Sex" = sex, "Marital status" = marital, "Age" = age_group) %>%
tab_cols(total(label = "N")) %>%
tab_stat_cases(total_row_position = "none") %>%
tab_pivot() %>%
split_columns() %>%
kable()
require(dplyr)
dd <- data.frame(barcode = c("16929", "64605", "03086", "29356", "23871"),
sex = factor(c("M", "F", "M", "F", "M")),
marital = factor(c("Married", "Single", "Single", "Single", "Divorced")),
age_group = factor(c("<25", "25-34", "35-44", "45-54", ">= 55")))
require(dplyr)
age_groups <- dd %>%
group_by(age_group) %>%
count() %>%
rename(variable = age_group) %>%
ungroup
sex <- dd %>%
group_by(sex) %>%
count() %>%
rename(variable = sex)%>%
ungroup
marital <- dd %>%
group_by(marital) %>%
count() %>%
rename(variable = marital)%>%
ungroup
freq_table <- age_groups %>%
add_row(sex) %>%
add_row(marital)
knitr::kable(freq_table) %>%
kableExtra::group_rows(group_label = "Age groups", start_row = 1, end_row = 5) %>%
kableExtra::group_rows(group_label = "Sex", start_row = 6, end_row = 7) %>%
kableExtra::group_rows(group_label = "Marital status", start_row = 8, end_row = 10)