#r #datatables #kable #gt
#r #таблицы данных #kable #gt
Вопрос:
Я пытаюсь сэкономить время на получение таблицы, как в приведенном ниже примере, но в R, не справляясь и не вставляя из R в word
Мой конкретный тип данных, которые я хочу преобразовать во что-то похожее на приведенное выше изображение, находится прямо здесь:
test_data <- structure(list(age_band = structure(c(3L, 3L, 3L, 2L, 1L, 2L,
2L, 1L, 1L, 3L), .Label = c("20-39", "40-59", "60 "), class = "factor"),
tested = c("positive", "positive", "showing symptoms",
"positive", "positive", "positive", "showing symptoms", "positive",
"positive", "showing symptoms"), comorbidities = structure(c(5L,
9L, 5L, 5L, 9L, 1L, 5L, 1L, 5L, 3L), .Label = c("asthma",
"diabetes_type_one", "diabetes_type_two", "heart_disease",
"hypertension", "kidney_disease", "liver_disease", "lung_condition",
"obesity"), class = "factor"), count = c(1L, 1L, 37L, 5L,
10L, 4L, 234L, 6L, 5L, 12L), percentage = c(50, 50, 45.7,
38.5, 35.7, 30.8, 30, 21.4, 17.9, 14.8)), row.names = c(NA,
-10L), groups = structure(list(age_band = structure(c(1L, 1L,
1L, 2L, 2L, 2L, 3L, 3L, 3L, 3L), .Label = c("20-39", "40-59",
"60 "), class = "factor"), tested = c("positive", "positive",
"positive", "positive", "positive", "showing symptoms", "positive",
"positive", "showing symptoms", "showing symptoms"), comorbidities = structure(c(1L,
5L, 9L, 1L, 5L, 5L, 5L, 9L, 3L, 5L), .Label = c("asthma", "diabetes_type_one",
"diabetes_type_two", "heart_disease", "hypertension", "kidney_disease",
"liver_disease", "lung_condition", "obesity"), class = "factor"),
.rows = structure(list(8L, 9L, 5L, 6L, 4L, 7L, 1L, 2L, 10L,
3L), ptype = integer(0), class = c("vctrs_list_of", "vctrs_vctr",
"list"))), row.names = c(NA, 10L), class = c("tbl_df", "tbl",
"data.frame"), .drop = TRUE), class = c("grouped_df", "tbl_df",
"tbl", "data.frame"))
С моими конкретными данными — я хочу возрастную группу 20-39; 40-59 and 60
, как 2015; 2016; 2017
в таблице выше, и прямо под каждой возрастной группой я хочу tested and showing symptoms
категории, похожие write
и pass rate
для каждой сопутствующей патологии в алфавитном порядке — asthma, cough, chills etc
(которые должны отображаться сбоку в виде строк — точно так 'Ontario RN university program collaborative partner, and language instruction'
же. Я хочу, чтобы количество и проценты сохранялись.
Возможно ли это в R? У меня есть Kable, но он не работает так, как я хочу. Должно быть что-то подобное?
====== Обновленный вопрос ====
Если это возможно с помощью библиотеки gt, пожалуйста, дайте мне знать? Приветствия!
Ответ №1:
Вы могли бы использовать tables
package:
library(tables)
tables::tabular((comorbidities = factor(comorbidities) 1)*((n=1) Percent("col"))~(age_band=factor(age_band))*(tested=factor(tested)), data=test_data)
tested tested tested
comorbidities positive showing symptoms positive showing symptoms positive showing symptoms
asthma n 1.00 0 1 0 0 0
Percent 33.33 NaN 50 0 0 0
diabetes_type_two n 0.00 0 0 0 0 1
Percent 0.00 NaN 0 0 0 50
hypertension n 1.00 0 1 1 1 1
Percent 33.33 NaN 50 100 50 50
obesity n 1.00 0 0 0 1 0
Percent 33.33 NaN 0 0 50 0
All n 3.00 0 2 1 2 2
Percent 100.00 NaN 100 100 100 100
Затем вы можете экспортировать результат в предпочитаемый формат, например, toHTML
:
Комментарии:
1. возможно ли это с помощью RMarkdown?
2. Да, либо как Latex, либо как HMTL, см. Стр. 43 связанной виньетки .
3. Я получаю сообщение об ошибке: «Ошибка в процентах («col»): не удалось найти функцию «Процент» »
4. удивительно, но я снова протестировал
reprex
, и он работает на моем компьютере. Вы загрузилисьtables
? Кроме того, мой код используетPercent
, поэтому я не до конца понимаю ошибкуPercentage
.5. потому что в моей реальной таблице это процент. Хм, я также загрузил библиотеку таблиц