Как я уже отмечал в своем комментарии, это действительно вопрос, состоящий из двух частей: один касается преобразования данных, но суть его заключается в форматировании с заголовками для вывода в формате PDF.Нужный вывод - это не то, чего вы обычно добиваетесь в R - вы пытаетесь получить повторяющиеся имена столбцов, а затем заголовки над ними.Так что это проблема RMarkdown, поскольку вы пытаетесь связать PDF-файл в этом нестандартном формате.
Первая часть - это изменение формы.Вы можете сделать это, приведя данные в длинную форму, разделив x1_count
и т. Д. На x1
и count
с separate
.Затем вы можете пометить как y = 0
с помощью mutate
и paste
, unite
, чтобы соединить эти значения, чтобы получить имена столбцов, такие как count_y = 0
, а затем вернуть его в широкий формат, как показано ниже.
library(tidyverse)
df %>%
gather(key = x_measure, value = val, -y) %>%
separate(x_measure, into = c("x", "measure"), sep = "_") %>%
mutate(y = paste("y =", y)) %>%
unite(key, measure, y) %>%
spread(key = key, value = val)
#> # A tibble: 3 x 5
#> x `count_y = 0` `count_y = 1` `mean_y = 0` `mean_y = 1`
#> <chr> <int> <int> <int> <int>
#> 1 x1 380081 19906 10 5
#> 2 x2 380081 19906 12 8
#> 3 x3 380081 19906 36 93
Вторая часть - подготовка к вязанию.Существует несколько пакетов, которые позволяют создавать такие печатные таблицы - я больше всего знаком с kableExtra
, но есть также huxtable
, xtable
и, вероятно,несколько других.Вот фрагмент RMarkdown, который я использовал бы для этого с kableExtra
.
. Я использую rename_all
и str_remove
, чтобы избавиться от битов, подобных count_
в count_y = 0
.Чтобы изменить форму, мне все еще нужен был способ сохранить имена столбцов уникальными, но теперь я могу отбросить эти части имен.
Затем kableExtra::kable_styling
и kableExtra::add_header_above
позволяют печатать со вторым уровнемзаголовки.Я бы порекомендовал пройтись по виньеткам , потому что они очень тщательные.
---
title: "Table with headings"
output: pdf_document
---
```{r echo=FALSE, message=FALSE, warning=FALSE}
library(tidyverse)
library(knitr)
library(kableExtra)
df %>%
gather(key = x_measure, value = val, -y) %>%
separate(x_measure, into = c("x", "measure"), sep = "_") %>%
mutate(y = paste("y =", y)) %>%
unite(key, measure, y) %>%
spread(key = key, value = val) %>%
rename_all(str_remove, "^[a-z]+_") %>%
kable(booktabs = T) %>%
kable_styling() %>%
add_header_above(c(" " = 1, "count" = 2, "mean" = 2))
```
Вязание этого дает PDF с:
![enter image description here](https://i.stack.imgur.com/She19.png)