Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将多个汇总表与子目合并_R_R Markdown - Fatal编程技术网

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)