#r #r-markdown #kable #stargazer
#r #r-markdown #kable #звездочет
Вопрос:
Я хочу создать аккуратную таблицу в R markdown с помощью пакета kable, но мои данные необходимо преобразовать.
Мои данные выглядят так:
category <- c('population', 'population', 'sample', 'sample', 'population', 'population', 'sample', 'sample')
gender <- c('female', 'male', 'female', 'male', 'female', 'male', 'female', 'male')
n <- c(12,20,14,14,11,21,13,15)
frequency <- c(0.375, 0.625, 0.5, 0.5, 0.34375, 0.65625, 0.4642857, 0.5357143)
cohort <- c('one', 'one', 'one', 'one', 'two', 'two', 'two', 'two')
df <- data.frame(category, gender, n, frequency, cohort)
Я хотел бы создать таблицу в R markdown, которая выглядит следующим образом (но я приветствую другие предложения):
Есть идеи о том, как это решить? Я ценю любую помощь!
Комментарии:
1. В этом случае вы можете попробовать kableExtra. Если есть что-то более конкретное, что мешает вам использовать kableExtra, пожалуйста, спросите еще раз.
Ответ №1:
Как было предложено @rjen, пакет kableExtra может вам подойти. Ниже приведен рабочий пример.
Во-первых, было бы перевести в широкий формат и упорядочить столбцы в соответствии с желаемой таблицей. Затем установите выравнивание на c
(по центру) и скройте имена столбцов. Использование add_header_above
даст вам 3-уровневый заголовок. Используемые числа указывают ширину / диапазон заголовка относительно столбцов под ним.
library(tidyverse)
library(kableExtra)
df %>%
pivot_wider(id_cols = cohort, names_from = c(category, gender), values_from = c(frequency, n)) %>%
select(cohort, frequency_population_male, frequency_sample_male, frequency_population_female, frequency_sample_female,
n_population_male, n_sample_male, n_population_female, n_sample_female) %>%
mutate_if(is.numeric, format, digits=2) %>%
kable(align = rep('c', 9), col.names = NULL) %>%
kable_classic() %>%
add_header_above(c("Cohort", rep(c("Population", "Sample"), 4))) %>%
add_header_above(c(" ", "Male" = 2, "Female" = 2, "Male" = 2, "Female" = 2)) %>%
add_header_above(c(" ", "Frequency" = 4, "N" = 4))
Вывод