class: center, middle, inverse, title-slide <style type="text/css"> .remark-slide table{ border: none } .remark-slide-table { } tr:first-child { border-top: none; } tr:last-child { border-bottom: none; } </style> <style type="text/css"> /* THIS IS A CSS CHUNK - THIS IS A COMMENT */ /* Size of font in code echo. E.g. 10px or 50% */ .remark-code { font-size: 70%; } /* Size of font in text */ .medium-text { font-size: 75%; } /* Size of font in tables */ .small-table table { font-size: 6px; } .medium-table table { font-size: 8px; } .medium-large-table table { font-size: 10px; } </style> # Введение в R для прикладной эпидемиологии ### Группировка данных contact@appliedepi.org --- # Группировка данных <img src="../../../../images/grouping/Grouping_1500x500.png" width="100%" /> --- # Цели и расписание **В этом модуле мы стремимся помочь вам:** * Практика использования {janitor} для быстрого создания простого подсчета * Попрактиковаться в использовании {dplyr} для универсального обобщения данных * Попрактиковаться в использовании {gtsummary} для создания готовых к публикации таблиц * Создавать таблицы пригодные для печати и экспортировать их в формате PNG, Word и т.д. <template id="7153bf05-b095-4b04-9da2-85de46749605"><style> .tabwid table{ border-spacing:0px !important; border-collapse:collapse; line-height:1; margin-left:auto; margin-right:auto; border-width: 0; display: table; border-color: transparent; caption-side: top; } .tabwid-caption-bottom table{ caption-side: bottom; } .tabwid_left table{ margin-left:0; } .tabwid_right table{ margin-right:0; } .tabwid td { padding: 0; } .tabwid a { text-decoration: none; } .tabwid thead { background-color: transparent; } .tabwid tfoot { background-color: transparent; } .tabwid table tr { background-color: transparent; } .katex-display { margin: 0 0 !important; } </style><div class="tabwid"><style>.cl-67c56230{}.cl-67b92b78{font-family:'Arial';font-size:11pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-67be187c{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-67be2f06{width:0.919in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 2pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f10{width:1.564in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 2pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f24{width:4.803in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 2pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f25{width:0.919in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f38{width:1.564in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f39{width:4.803in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f42{width:0.919in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f4c{width:1.564in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f4d{width:4.803in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f56{width:0.919in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f60{width:1.564in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f61{width:4.803in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f62{width:0.919in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f6a{width:1.564in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f74{width:4.803in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f7e{width:0.919in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f7f{width:1.564in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-67be2f88{width:4.803in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}</style><table class='cl-67c56230'><thead><tr style="overflow-wrap:break-word;"><td class="cl-67be2f06"><p class="cl-67be187c"><span class="cl-67b92b78">Time</span></p></td><td class="cl-67be2f10"><p class="cl-67be187c"><span class="cl-67b92b78">Location</span></p></td><td class="cl-67be2f24"><p class="cl-67be187c"><span class="cl-67b92b78">Topic</span></p></td></tr></thead><tbody><tr style="overflow-wrap:break-word;"><td class="cl-67be2f25"><p class="cl-67be187c"><span class="cl-67b92b78">15 минут</span></p></td><td class="cl-67be2f38"><p class="cl-67be187c"><span class="cl-67b92b78">Главная</span></p></td><td class="cl-67be2f39"><p class="cl-67be187c"><span class="cl-67b92b78">Повторение предыдущего модуля</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-67be2f42"><p class="cl-67be187c"><span class="cl-67b92b78">20 минут</span></p></td><td class="cl-67be2f4c"><p class="cl-67be187c"><span class="cl-67b92b78">Главная</span></p></td><td class="cl-67be2f4d"><p class="cl-67be187c"><span class="cl-67b92b78">Подходы к группировке и обобщению данных</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-67be2f56"><p class="cl-67be187c"><span class="cl-67b92b78">45 минут</span></p></td><td class="cl-67be2f60"><p class="cl-67be187c"><span class="cl-67b92b78">Сессионные залы</span></p></td><td class="cl-67be2f61"><p class="cl-67be187c"><span class="cl-67b92b78">Демонстрация и упражнение: janitor</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-67be2f56"><p class="cl-67be187c"><span class="cl-67b92b78">45 минут</span></p></td><td class="cl-67be2f60"><p class="cl-67be187c"><span class="cl-67b92b78">Сессионные залы</span></p></td><td class="cl-67be2f61"><p class="cl-67be187c"><span class="cl-67b92b78">Демонстрация и упражнение: dplyr</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-67be2f56"><p class="cl-67be187c"><span class="cl-67b92b78">45 минут</span></p></td><td class="cl-67be2f60"><p class="cl-67be187c"><span class="cl-67b92b78">Сессионные залы</span></p></td><td class="cl-67be2f61"><p class="cl-67be187c"><span class="cl-67b92b78">Демонстрация и упражнение: gtsummary</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-67be2f62"><p class="cl-67be187c"><span class="cl-67b92b78">20 минут</span></p></td><td class="cl-67be2f6a"><p class="cl-67be187c"><span class="cl-67b92b78">Главная</span></p></td><td class="cl-67be2f74"><p class="cl-67be187c"><span class="cl-67b92b78">Общее обсуждение и демонстрация flextable (если есть время)</span></p></td></tr></tbody><tfoot><tr style="overflow-wrap:break-word;"><td colspan="3"class="cl-67be2f7e"><p class="cl-67be187c"><span class="cl-67b92b78">Перерывы включены выше, но не показаны как строки</span></p></td></tr></tfoot></table></div></template> <div class="flextable-shadow-host" id="c351304d-fc33-4c08-8c9f-3d808360eb8a"></div> <script> var dest = document.getElementById("c351304d-fc33-4c08-8c9f-3d808360eb8a"); var template = document.getElementById("7153bf05-b095-4b04-9da2-85de46749605"); var caption = template.content.querySelector("caption"); var fantome = dest.attachShadow({mode: 'open'}); var templateContent = template.content; fantome.appendChild(templateContent); </script> ??? Note stretch breaks throughout. --- class: inverse, center, middle ## {janitor} - скорость ## {tidyverse} - гибкость ## {gtsummary} - красота --- class: inverse, center, middle ## {janitor} - скорость <img src="../../../../images/grouping/simple_table.png" width="65%" /> --- # `tabyl()` .pull-left[ ```r surv %>% * tabyl(district) ``` ] -- .pull-right[ ``` ## district n percent valid_percent ## Central I 31 0.057513915 0.05772812 ## Central II 15 0.027829314 0.02793296 ## East I 25 0.046382189 0.04655493 ## East II 65 0.120593692 0.12104283 ## East III 10 0.018552876 0.01862197 ## Mountain Rural 180 0.333951763 0.33519553 ## West I 14 0.025974026 0.02607076 ## West II 104 0.192949907 0.19366853 ## West III 93 0.172541744 0.17318436 ## <NA> 2 0.003710575 NA ``` ] --- # Функции `adorn_()` .pull-left[ ```r surv %>% tabyl(district) %>% * adorn_totals() ``` ] .pull-right[ ``` ## district n percent valid_percent ## Central I 31 0.057513915 0.05772812 ## Central II 15 0.027829314 0.02793296 ## East I 25 0.046382189 0.04655493 ## East II 65 0.120593692 0.12104283 ## East III 10 0.018552876 0.01862197 ## Mountain Rural 180 0.333951763 0.33519553 ## West I 14 0.025974026 0.02607076 ## West II 104 0.192949907 0.19366853 ## West III 93 0.172541744 0.17318436 ## <NA> 2 0.003710575 NA ## Total 539 1.000000000 1.00000000 ``` ] --- # Функции `adorn_()` .pull-left[ ```r surv %>% tabyl(district) %>% adorn_totals() %>% * adorn_pct_formatting() ``` ] .pull-right[ ``` ## district n percent valid_percent ## Central I 31 5.8% 5.8% ## Central II 15 2.8% 2.8% ## East I 25 4.6% 4.7% ## East II 65 12.1% 12.1% ## East III 10 1.9% 1.9% ## Mountain Rural 180 33.4% 33.5% ## West I 14 2.6% 2.6% ## West II 104 19.3% 19.4% ## West III 93 17.3% 17.3% ## <NA> 2 0.4% - ## Total 539 100.0% 100.0% ``` ] --- # `tabyl()` кросс-табуляция .pull-left[ ```r surv %>% * tabyl(district, gender) ``` ] -- .pull-right[ ``` ## district female male NA_ ## Central I 15 15 1 ## Central II 10 4 1 ## East I 11 12 2 ## East II 31 33 1 ## East III 3 6 1 ## Mountain Rural 99 76 5 ## West I 8 5 1 ## West II 53 50 1 ## West III 44 44 5 ## <NA> 1 1 0 ``` ] --- # `tabyl()` кросс-табуляция .pull-left[ ```r surv %>% * tabyl(district, gender, show_na = FALSE) ``` Удалите отсутствующие значения из таблицы. ] .pull-right[ ``` ## district female male ## Central I 15 15 ## Central II 10 4 ## East I 11 12 ## East II 31 33 ## East III 3 6 ## Mountain Rural 99 76 ## West I 8 5 ## West II 53 50 ## West III 44 44 ``` ] --- # `adorn_()` кросс-табуляция .pull-left[ ```r surv %>% tabyl(district, gender, show_na = FALSE) %>% * adorn_totals(where = "both") ``` Добавьте итоговые значения как для строк, так и для столбцов. ] .pull-right[ ``` ## district female male Total ## Central I 15 15 30 ## Central II 10 4 14 ## East I 11 12 23 ## East II 31 33 64 ## East III 3 6 9 ## Mountain Rural 99 76 175 ## West I 8 5 13 ## West II 53 50 103 ## West III 44 44 88 ## Total 274 245 519 ``` ] --- # `adorn_()` кросс-табуляция .pull-left[ ```r surv %>% tabyl(district, gender, show_na = FALSE) %>% adorn_totals(where = "both") %>% * adorn_percentages() %>% * adorn_pct_formatting() ``` Добавьте форматированные проценты с помощью этих двух команд. ] .pull-right[ ``` ## district female male Total ## Central I 50.0% 50.0% 100.0% ## Central II 71.4% 28.6% 100.0% ## East I 47.8% 52.2% 100.0% ## East II 48.4% 51.6% 100.0% ## East III 33.3% 66.7% 100.0% ## Mountain Rural 56.6% 43.4% 100.0% ## West I 61.5% 38.5% 100.0% ## West II 51.5% 48.5% 100.0% ## West III 50.0% 50.0% 100.0% ## Total 52.8% 47.2% 100.0% ``` ] --- # `adorn_()` кросс-табуляция .pull-left[ ```r surv %>% tabyl(district, gender, show_na = FALSE) %>% adorn_totals(where = "both") %>% adorn_percentages() %>% * adorn_pct_formatting(digits = 0) ``` Установите количество десятичных знаков. ] .pull-right[ ``` ## district female male Total ## Central I 50% 50% 100% ## Central II 71% 29% 100% ## East I 48% 52% 100% ## East II 48% 52% 100% ## East III 33% 67% 100% ## Mountain Rural 57% 43% 100% ## West I 62% 38% 100% ## West II 51% 49% 100% ## West III 50% 50% 100% ## Total 53% 47% 100% ``` ] ??? This may look ugly, but you can make this into pretty image very easily --- # {flextable} Легко передайте таблицу в канал `qflextable()` для красивой печати в виде html. .pull-left[ ```r surv %>% tabyl(district, gender, show_na = FALSE) %>% adorn_totals(where = "both") %>% adorn_percentages() %>% adorn_pct_formatting(digits = 0) %>% * qflextable() ``` ] .pull-right[ <template id="3252010b-95a3-4926-b2c4-5e8f3eb5c977"><style> .tabwid table{ border-spacing:0px !important; border-collapse:collapse; line-height:1; margin-left:auto; margin-right:auto; border-width: 0; display: table; border-color: transparent; caption-side: top; } .tabwid-caption-bottom table{ caption-side: bottom; } .tabwid_left table{ margin-left:0; } .tabwid_right table{ margin-right:0; } .tabwid td { padding: 0; } .tabwid a { text-decoration: none; } .tabwid thead { background-color: transparent; } .tabwid tfoot { background-color: transparent; } .tabwid table tr { background-color: transparent; } .katex-display { margin: 0 0 !important; } </style><div class="tabwid"><style>.cl-689a99fa{}.cl-688dd8dc{font-family:'Arial';font-size:11pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-68935578{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-68937044{width:1.321in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 2pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6893704e{width:0.744in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 2pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-68937058{width:0.616in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 2pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-68937059{width:0.676in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 2pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-68937062{width:1.321in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6893706c{width:0.744in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6893706d{width:0.616in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-68937076{width:0.676in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-68937077{width:1.321in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-68937078{width:0.744in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6893708a{width:0.616in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-68937094{width:0.676in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}</style><table class='cl-689a99fa'><thead><tr style="overflow-wrap:break-word;"><td class="cl-68937044"><p class="cl-68935578"><span class="cl-688dd8dc">district</span></p></td><td class="cl-6893704e"><p class="cl-68935578"><span class="cl-688dd8dc">female</span></p></td><td class="cl-68937058"><p class="cl-68935578"><span class="cl-688dd8dc">male</span></p></td><td class="cl-68937059"><p class="cl-68935578"><span class="cl-688dd8dc">Total</span></p></td></tr></thead><tbody><tr style="overflow-wrap:break-word;"><td class="cl-68937062"><p class="cl-68935578"><span class="cl-688dd8dc">Central I</span></p></td><td class="cl-6893706c"><p class="cl-68935578"><span class="cl-688dd8dc">50%</span></p></td><td class="cl-6893706d"><p class="cl-68935578"><span class="cl-688dd8dc">50%</span></p></td><td class="cl-68937076"><p class="cl-68935578"><span class="cl-688dd8dc">100%</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-68937062"><p class="cl-68935578"><span class="cl-688dd8dc">Central II</span></p></td><td class="cl-6893706c"><p class="cl-68935578"><span class="cl-688dd8dc">71%</span></p></td><td class="cl-6893706d"><p class="cl-68935578"><span class="cl-688dd8dc">29%</span></p></td><td class="cl-68937076"><p class="cl-68935578"><span class="cl-688dd8dc">100%</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-68937062"><p class="cl-68935578"><span class="cl-688dd8dc">East I</span></p></td><td class="cl-6893706c"><p class="cl-68935578"><span class="cl-688dd8dc">48%</span></p></td><td class="cl-6893706d"><p class="cl-68935578"><span class="cl-688dd8dc">52%</span></p></td><td class="cl-68937076"><p class="cl-68935578"><span class="cl-688dd8dc">100%</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-68937062"><p class="cl-68935578"><span class="cl-688dd8dc">East II</span></p></td><td class="cl-6893706c"><p class="cl-68935578"><span class="cl-688dd8dc">48%</span></p></td><td class="cl-6893706d"><p class="cl-68935578"><span class="cl-688dd8dc">52%</span></p></td><td class="cl-68937076"><p class="cl-68935578"><span class="cl-688dd8dc">100%</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-68937062"><p class="cl-68935578"><span class="cl-688dd8dc">East III</span></p></td><td class="cl-6893706c"><p class="cl-68935578"><span class="cl-688dd8dc">33%</span></p></td><td class="cl-6893706d"><p class="cl-68935578"><span class="cl-688dd8dc">67%</span></p></td><td class="cl-68937076"><p class="cl-68935578"><span class="cl-688dd8dc">100%</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-68937062"><p class="cl-68935578"><span class="cl-688dd8dc">Mountain Rural</span></p></td><td class="cl-6893706c"><p class="cl-68935578"><span class="cl-688dd8dc">57%</span></p></td><td class="cl-6893706d"><p class="cl-68935578"><span class="cl-688dd8dc">43%</span></p></td><td class="cl-68937076"><p class="cl-68935578"><span class="cl-688dd8dc">100%</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-68937062"><p class="cl-68935578"><span class="cl-688dd8dc">West I</span></p></td><td class="cl-6893706c"><p class="cl-68935578"><span class="cl-688dd8dc">62%</span></p></td><td class="cl-6893706d"><p class="cl-68935578"><span class="cl-688dd8dc">38%</span></p></td><td class="cl-68937076"><p class="cl-68935578"><span class="cl-688dd8dc">100%</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-68937062"><p class="cl-68935578"><span class="cl-688dd8dc">West II</span></p></td><td class="cl-6893706c"><p class="cl-68935578"><span class="cl-688dd8dc">51%</span></p></td><td class="cl-6893706d"><p class="cl-68935578"><span class="cl-688dd8dc">49%</span></p></td><td class="cl-68937076"><p class="cl-68935578"><span class="cl-688dd8dc">100%</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-68937062"><p class="cl-68935578"><span class="cl-688dd8dc">West III</span></p></td><td class="cl-6893706c"><p class="cl-68935578"><span class="cl-688dd8dc">50%</span></p></td><td class="cl-6893706d"><p class="cl-68935578"><span class="cl-688dd8dc">50%</span></p></td><td class="cl-68937076"><p class="cl-68935578"><span class="cl-688dd8dc">100%</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-68937077"><p class="cl-68935578"><span class="cl-688dd8dc">Total</span></p></td><td class="cl-68937078"><p class="cl-68935578"><span class="cl-688dd8dc">53%</span></p></td><td class="cl-6893708a"><p class="cl-68935578"><span class="cl-688dd8dc">47%</span></p></td><td class="cl-68937094"><p class="cl-68935578"><span class="cl-688dd8dc">100%</span></p></td></tr></tbody></table></div></template> <div class="flextable-shadow-host" id="4021747d-b717-45ad-9e63-24d678ac667f"></div> <script> var dest = document.getElementById("4021747d-b717-45ad-9e63-24d678ac667f"); var template = document.getElementById("3252010b-95a3-4926-b2c4-5e8f3eb5c977"); var caption = template.content.querySelector("caption"); var fantome = dest.attachShadow({mode: 'open'}); var templateContent = template.content; fantome.appendChild(templateContent); </script> ] .footnote[`qflextable()` означает "быстрая гибкая таблица".] --- class: inverse, center, middle ## {tidyverse} - гибкость <img src="../../../../images/grouping/flexibility.png" width="65%" /> --- # Функции Общие функции группировки/сводки, все из {tidyverse}: * `count()` * `group_by()` * `summarise()` * `arrange()` --- # `count()` Передайте данные в канал `count()` и укажите имя столбца. Это возвращает количество строк на одно уникальное значение (на группу) -- ```r surv %>% * count(hospital) ``` ``` ## hospital n ## 1 Central Hospital 40 ## 2 Military Hospital 78 ## 3 Other 85 ## 4 Port Hospital 174 ## 5 SMMH 29 ## 6 <NA> 133 ``` ??? Very quick and fast --- # `count()` Вы можете включить несколько столбцов группировки -- ```r surv %>% * count(hospital, gender) ``` ``` ## hospital gender n ## 1 Central Hospital female 16 ## 2 Central Hospital male 23 ## 3 Central Hospital <NA> 1 ## 4 Military Hospital female 34 ## 5 Military Hospital male 41 ## 6 Military Hospital <NA> 3 ## 7 Other female 44 ## 8 Other male 37 ## 9 Other <NA> 4 ## 10 Port Hospital female 95 ## 11 Port Hospital male 73 ## 12 Port Hospital <NA> 6 ## 13 SMMH female 17 ## 14 SMMH male 11 ## 15 SMMH <NA> 1 ## 16 <NA> female 69 ## 17 <NA> male 61 ## 18 <NA> <NA> 3 ``` ??? Very quick and fast --- # group_by() и summarise() Но что, если вам нужны не только подсчеты? -- "Каков средний возраст в каждой группе?". -- "Какова самая поздняя дата появления симптомов в каждой группе?". -- "Каково число смертей среди мужчин в каждой группе?" -- `group_by()` и `summarise()` вместе позволяют гибко создавать **новый, сводный датафрейм** со **статистикой по группам**. .footnote[`summarise()` и `summarize()` эквивалентны] --- # group_by() и summarise() ```r surv %>% group_by(hospital) ``` Никаких видимых изменений в наборе данных *пока* не будет применена другая функция {dplyr}. -- При печати `Groups:` перечисляются над данными. ``` ## # A tibble: 539 × 29 ## # Groups: hospital [6] ## case_id date_onset date_report diff gender age age_u…¹ age_y…² age_cat hospi…³ distr…⁴ distr…⁵ distr…⁶ moved wt_kg ht_cm fever chills ## <chr> <date> <date> <drtn> <chr> <dbl> <chr> <dbl> <fct> <chr> <chr> <chr> <chr> <lgl> <int> <int> <chr> <chr> ## 1 86340d 2014-10-30 2014-10-31 1 days female 1 years 1 0-9 Port H… Mounta… Mounta… Mounta… FALSE 18 29 yes no ## 2 92d002 2014-08-16 2014-08-20 4 days female 16 years 16 10-19 <NA> Mounta… Mounta… Mounta… FALSE 59 133 yes no ## 3 544bd1 2014-08-29 2014-08-30 1 days female 10 years 10 10-19 <NA> East II East II East II FALSE 39 106 yes no ## 4 6056ba 2014-10-20 2014-10-21 1 days female 0 years 0 0-9 <NA> West I… West I… West I… FALSE NA 24 yes yes ## 5 e64e04 2014-10-06 2014-10-10 4 days female 7 years 7 0-9 <NA> Mounta… Mounta… Mounta… FALSE 32 91 no no ## 6 5a65bb 2014-09-21 2014-09-22 1 days male 4 years 4 0-9 Port H… Mounta… Mounta… Mounta… FALSE 41 74 yes yes ## 7 2ae019 2014-05-06 2014-05-11 5 days male 37 years 37 30-39 Other West I… West I… West I… FALSE 81 167 yes no ## 8 7ca4c0 2014-09-29 2014-09-30 1 days male 11 years 11 10-19 Port H… West I… West I… West I… FALSE 56 163 yes no ## 9 30af4f NA 2014-11-10 NA days female 6 years 6 0-9 Port H… West I West I West I FALSE 30 75 no no ## 10 a06123 2014-09-10 2014-09-15 5 days male 10 years 10 10-19 <NA> Mounta… Mounta… Mounta… FALSE 55 125 yes no ## # … with 529 more rows, 11 more variables: cough <chr>, aches <chr>, vomit <chr>, temp <dbl>, bmi <dbl>, admin3pcod <chr>, ## # lab_confirmed <lgl>, lat <dbl>, lon <dbl>, epilink <chr>, case_def <chr>, and abbreviated variable names ¹age_unit, ²age_years, ## # ³hospital, ⁴district, ⁵district_res, ⁶district_det ``` ??? Note the `groups: hospital`, at the top of the tibble --- # group_by() и summarise() В `summarise()`, *создайте столбцы в **новом**, обобщенном наборе данных.* -- <h4>summarise(<span style='color:deeppink'>имя нового столбца</span> = <span style='color:cornflowerblue'>функция</span> для применения к каждой группе строк)</h4> -- <code class ='r hljs remark-code'>surv %>% <br> group_by(hospital) %>% <br> summarise()</code> ``` ## # A tibble: 6 × 1 ## hospital ## <chr> ## 1 Central Hospital ## 2 Military Hospital ## 3 Other ## 4 Port Hospital ## 5 SMMH ## 6 <NA> ``` --- # group_by() и summarise() Within the parentheses, *list new columns for the **new**, summary dataset.* <h4>summarise(<span style='color:deeppink'>имя нового столбца</span> = <span style='color:cornflowerblue'>функция</span> для применения к каждой группе строк)</h4> <code class ='r hljs remark-code'>surv %>% <br> group_by(hospital) %>% <br> summarise(<span style='color:deeppink'>n_rows</span> = <span style='color:cornflowerblue'>n()</span>) # <span style='color:cornflowerblue'>n()</span> подсчитывает количество строк в группе</code> ``` ## # A tibble: 6 × 2 ## hospital n_rows ## <chr> <int> ## 1 Central Hospital 40 ## 2 Military Hospital 78 ## 3 Other 85 ## 4 Port Hospital 174 ## 5 SMMH 29 ## 6 <NA> 133 ``` --- # group_by() и summarise() В круглых скобках *перечислите новые столбцы для **нового**, сводного набора данных*. <h4>summarise(<span style='color:deeppink'>имя нового столбца</span> = <span style='color:cornflowerblue'>функция</span> для применения к каждой группе строк)</h4> <code class ='r hljs remark-code'>surv %>% <br> group_by(hospital) %>% <br> summarise(<br> <span style='color:deeppink'>n_rows</span> = <span style='color:cornflowerblue'>n()</span>, #<span style='color:cornflowerblue'>n()</span> подсчитывает количество строк для каждой группы<br> <span style='color:deeppink'>age_avg</span> = <span style='color:cornflowerblue'>mean(age_years, na.rm = T)</span>) # средний возраст в группе</code> ``` ## # A tibble: 6 × 3 ## hospital n_rows age_avg ## <chr> <int> <dbl> ## 1 Central Hospital 40 14.9 ## 2 Military Hospital 78 15.0 ## 3 Other 85 16.1 ## 4 Port Hospital 174 15.1 ## 5 SMMH 29 15.9 ## 6 <NA> 133 17.6 ``` --- # group_by() и summarise() В круглых скобках *создайте столбцы в **новом**, сводном наборе данных*. <h4>summarise(<span style='color:deeppink'>имя нового столбца</span> = <span style='color:cornflowerblue'>функция</span> для применения к каждой группе строк)</h4> <code class ='r hljs remark-code'>surv %>% <br> group_by(hospital) %>% <br> summarise(<br> <span style='color:deeppink'>n_rows</span> = <span style='color:cornflowerblue'>n()</span>, # <span style='color:cornflowerblue'>n()</span> подсчитывает количество строк в группе<br> <span style='color:deeppink'>age_avg</span> = <span style='color:cornflowerblue'>mean(age_years, na.rm = T)</span>, # средний возраст в группе<br> <span style='color:deeppink'>max_onset</span> = <span style='color:cornflowerblue'>max(date_onset, na.rm=T)</span>) # последняя дата начала заболевания</code> ``` ## # A tibble: 6 × 4 ## hospital n_rows age_avg max_onset ## <chr> <int> <dbl> <date> ## 1 Central Hospital 40 14.9 2014-11-24 ## 2 Military Hospital 78 15.0 2014-11-25 ## 3 Other 85 16.1 2014-11-26 ## 4 Port Hospital 174 15.1 2014-11-28 ## 5 SMMH 29 15.9 2014-11-28 ## 6 <NA> 133 17.6 2014-11-27 ``` --- # group_by() и summarise() В круглых скобках *создайте столбцы в **новом**, сводном наборе данных*. <h4>summarise(<span style='color:deeppink'>имя нового столбца</span> = <span style='color:cornflowerblue'>функция</span> для применения к каждой группе строк)</h4> <code class ='r hljs remark-code'>surv %>% <br> group_by(hospital) %>% <br> summarise(<br> <span style='color:deeppink'>n_rows</span> = <span style='color:cornflowerblue'>n()</span>, # <span style='color:cornflowerblue'>n()</span> подсчитывает количество строк в группе<br> <span style='color:deeppink'>age_avg</span> = <span style='color:cornflowerblue'>mean(age_years, na.rm = T)</span>, # средний возраст в группе<br> <span style='color:deeppink'>max_onset</span> = <span style='color:cornflowerblue'>max(date_onset, na.rm=T)</span>, # последняя дата начала заболевания<br> <span style='color:deeppink'> n_female </span>= <span style='color:cornflowerblue'>sum(gender == 'female', na.rm=T)</span>) ## количество женщин в группе</code> ``` ## # A tibble: 6 × 5 ## hospital n_rows age_avg max_onset n_female ## <chr> <int> <dbl> <date> <int> ## 1 Central Hospital 40 14.9 2014-11-24 16 ## 2 Military Hospital 78 15.0 2014-11-25 34 ## 3 Other 85 16.1 2014-11-26 44 ## 4 Port Hospital 174 15.1 2014-11-28 95 ## 5 SMMH 29 15.9 2014-11-28 17 ## 6 <NA> 133 17.6 2014-11-27 69 ``` --- # group_by() и summarise() В круглых скобках *создайте столбцы в **новом**, сводном наборе данных*. <h4>summarise(<span style='color:deeppink'>имя нового столбца</span> = <span style='color:cornflowerblue'>функция</span> для применения к каждой группе строк)</h4> <code class ='r hljs remark-code'>surv %>% <br> group_by(hospital) %>% <br> summarise(<br> <span style='color:deeppink'> n_rows </span> = <span style='color:cornflowerblue'>n()</span>, # <span style='color:cornflowerblue'>n()</span> подсчитывает количество строк в группе<br> <span style='color:deeppink'>age_avg</span> = <span style='color:cornflowerblue'>mean(age_years, na.rm = T)</span>, # средний возраст в группе<br> <span style='color:deeppink'>max_onset</span> = <span style='color:cornflowerblue'>max(date_onset, na.rm=T)</span>, # последняя дата начала заболевания<br> <span style='color:deeppink'> n_female </span>= <span style='color:cornflowerblue'>sum(gender == 'female', na.rm=T)</span>, ## количество женщин в группе<br> <span style='color:deeppink'>pct_female</span> = <span style='color:cornflowerblue'>percent(n_female / n_rows)</span>) # процент женщин в группе</code> ``` ## # A tibble: 6 × 6 ## hospital n_rows age_avg max_onset n_female pct_female ## <chr> <int> <dbl> <date> <int> <chr> ## 1 Central Hospital 40 14.9 2014-11-24 16 40% ## 2 Military Hospital 78 15.0 2014-11-25 34 44% ## 3 Other 85 16.1 2014-11-26 44 52% ## 4 Port Hospital 174 15.1 2014-11-28 95 55% ## 5 SMMH 29 15.9 2014-11-28 17 59% ## 6 <NA> 133 17.6 2014-11-27 69 52% ``` --- # `arrange()` Отсортируйте таблицу, поместив столбец (столбцы) для сортировки в `arrange()`. ```r surv %>% group_by(hospital) %>% summarise( n_rows = n(), # n() подсчитывает количество строк в группе age_avg = mean(age_years, na.rm = T), # средний возраст в группе max_onset = max(date_onset, na.rm=T), # последняя дата начала заболевания n_female = sum(gender == 'female', na.rm=T), # количество женщин в группе pct_female = percent(n_female / n_rows)) %>% # процент женщин в группе arrange(n_rows) ``` ``` ## # A tibble: 6 × 6 ## hospital n_rows age_avg max_onset n_female pct_female ## <chr> <int> <dbl> <date> <int> <chr> ## 1 SMMH 29 15.9 2014-11-28 17 59% ## 2 Central Hospital 40 14.9 2014-11-24 16 40% ## 3 Military Hospital 78 15.0 2014-11-25 34 44% ## 4 Other 85 16.1 2014-11-26 44 52% ## 5 <NA> 133 17.6 2014-11-27 69 52% ## 6 Port Hospital 174 15.1 2014-11-28 95 55% ``` --- # `arrange()` Оберните столбец(ы) в `desc()` для обратной сортировки ```r surv %>% group_by(hospital) %>% summarise( n_rows = n(), # n() подсчитывает количество строк в группе age_avg = mean(age_years, na.rm = T), # средний возраст в группе max_onset = max(date_onset, na.rm=T), # последняя дата начала заболевания n_female = sum(gender == 'female', na.rm=T), # количество женщин в группе pct_female = percent(n_female / n_rows)) %>% # процент женщин в группе arrange(-n_rows) ``` ``` ## # A tibble: 6 × 6 ## hospital n_rows age_avg max_onset n_female pct_female ## <chr> <int> <dbl> <date> <int> <chr> ## 1 Port Hospital 174 15.1 2014-11-28 95 55% ## 2 <NA> 133 17.6 2014-11-27 69 52% ## 3 Other 85 16.1 2014-11-26 44 52% ## 4 Military Hospital 78 15.0 2014-11-25 34 44% ## 5 Central Hospital 40 14.9 2014-11-24 16 40% ## 6 SMMH 29 15.9 2014-11-28 17 59% ``` --- # flextable Как и в случае с {janitor}, передайте `qflextable()` по каналу для быстрого создания HTML-таблицы. ```r surv %>% group_by(hospital) %>% summarise( n_rows = n(), # n() подсчитывает количество строк в группе age_avg = mean(age_years, na.rm = T), # средний возраст в группе max_onset = max(date_onset, na.rm=T), # последняя дата начала заболевания n_female = sum(gender == 'female', na.rm=T), # количество женщин в группе pct_female = percent(n_female / n_rows)) %>% # процент женщин в группе arrange(-n_rows) %>% * qflextable() ``` <template id="8801253f-22d5-4566-88ff-b39c5c3079f9"><style> .tabwid table{ border-spacing:0px !important; border-collapse:collapse; line-height:1; margin-left:auto; margin-right:auto; border-width: 0; display: table; border-color: transparent; caption-side: top; } .tabwid-caption-bottom table{ caption-side: bottom; } .tabwid_left table{ margin-left:0; } .tabwid_right table{ margin-right:0; } .tabwid td { padding: 0; } .tabwid a { text-decoration: none; } .tabwid thead { background-color: transparent; } .tabwid tfoot { background-color: transparent; } .tabwid table tr { background-color: transparent; } .katex-display { margin: 0 0 !important; } </style><div class="tabwid"><style>.cl-6bb65278{}.cl-6ba98584{font-family:'Arial';font-size:11pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-6bae98ee{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-6bae9902{margin:0;text-align:right;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-6baeb450{width:1.372in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 2pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb464{width:0.778in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 2pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb465{width:0.922in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 2pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb46e{width:1.067in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 2pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb478{width:0.914in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 2pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb482{width:1.033in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 2pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb483{width:1.372in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb496{width:0.778in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb4a0{width:0.922in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb4b4{width:1.067in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb4b5{width:0.914in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb4be{width:1.033in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb4bf{width:1.372in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb4c8{width:0.778in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb4c9{width:0.922in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb4d2{width:1.067in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb4d3{width:0.914in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb4dc{width:1.033in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb4e6{width:1.372in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb4e7{width:0.778in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb4f0{width:0.922in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb4fa{width:1.067in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb504{width:0.914in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb50e{width:1.033in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb518{width:1.372in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb522{width:0.778in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb52c{width:0.922in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb536{width:1.067in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb540{width:0.914in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb54a{width:1.033in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb54b{width:1.372in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb554{width:0.778in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb55e{width:0.922in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb568{width:1.067in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb57c{width:0.914in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-6baeb586{width:1.033in;background-color:transparent;vertical-align: middle;border-bottom: 2pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}</style><table class='cl-6bb65278'><thead><tr style="overflow-wrap:break-word;"><td class="cl-6baeb450"><p class="cl-6bae98ee"><span class="cl-6ba98584">hospital</span></p></td><td class="cl-6baeb464"><p class="cl-6bae9902"><span class="cl-6ba98584">n_rows</span></p></td><td class="cl-6baeb465"><p class="cl-6bae9902"><span class="cl-6ba98584">age_avg</span></p></td><td class="cl-6baeb46e"><p class="cl-6bae9902"><span class="cl-6ba98584">max_onset</span></p></td><td class="cl-6baeb478"><p class="cl-6bae9902"><span class="cl-6ba98584">n_female</span></p></td><td class="cl-6baeb482"><p class="cl-6bae98ee"><span class="cl-6ba98584">pct_female</span></p></td></tr></thead><tbody><tr style="overflow-wrap:break-word;"><td class="cl-6baeb483"><p class="cl-6bae98ee"><span class="cl-6ba98584">Port Hospital</span></p></td><td class="cl-6baeb496"><p class="cl-6bae9902"><span class="cl-6ba98584">174</span></p></td><td class="cl-6baeb4a0"><p class="cl-6bae9902"><span class="cl-6ba98584">15.08090</span></p></td><td class="cl-6baeb4b4"><p class="cl-6bae9902"><span class="cl-6ba98584">2014-11-28</span></p></td><td class="cl-6baeb4b5"><p class="cl-6bae9902"><span class="cl-6ba98584">95</span></p></td><td class="cl-6baeb4be"><p class="cl-6bae98ee"><span class="cl-6ba98584">55%</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-6baeb4bf"><p class="cl-6bae98ee"><span class="cl-6ba98584"></span></p></td><td class="cl-6baeb4c8"><p class="cl-6bae9902"><span class="cl-6ba98584">133</span></p></td><td class="cl-6baeb4c9"><p class="cl-6bae9902"><span class="cl-6ba98584">17.57143</span></p></td><td class="cl-6baeb4d2"><p class="cl-6bae9902"><span class="cl-6ba98584">2014-11-27</span></p></td><td class="cl-6baeb4d3"><p class="cl-6bae9902"><span class="cl-6ba98584">69</span></p></td><td class="cl-6baeb4dc"><p class="cl-6bae98ee"><span class="cl-6ba98584">52%</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-6baeb4bf"><p class="cl-6bae98ee"><span class="cl-6ba98584">Other</span></p></td><td class="cl-6baeb4c8"><p class="cl-6bae9902"><span class="cl-6ba98584">85</span></p></td><td class="cl-6baeb4c9"><p class="cl-6bae9902"><span class="cl-6ba98584">16.14759</span></p></td><td class="cl-6baeb4d2"><p class="cl-6bae9902"><span class="cl-6ba98584">2014-11-26</span></p></td><td class="cl-6baeb4d3"><p class="cl-6bae9902"><span class="cl-6ba98584">44</span></p></td><td class="cl-6baeb4dc"><p class="cl-6bae98ee"><span class="cl-6ba98584">52%</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-6baeb4e6"><p class="cl-6bae98ee"><span class="cl-6ba98584">Military Hospital</span></p></td><td class="cl-6baeb4e7"><p class="cl-6bae9902"><span class="cl-6ba98584">78</span></p></td><td class="cl-6baeb4f0"><p class="cl-6bae9902"><span class="cl-6ba98584">14.96104</span></p></td><td class="cl-6baeb4fa"><p class="cl-6bae9902"><span class="cl-6ba98584">2014-11-25</span></p></td><td class="cl-6baeb504"><p class="cl-6bae9902"><span class="cl-6ba98584">34</span></p></td><td class="cl-6baeb50e"><p class="cl-6bae98ee"><span class="cl-6ba98584">44%</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-6baeb518"><p class="cl-6bae98ee"><span class="cl-6ba98584">Central Hospital</span></p></td><td class="cl-6baeb522"><p class="cl-6bae9902"><span class="cl-6ba98584">40</span></p></td><td class="cl-6baeb52c"><p class="cl-6bae9902"><span class="cl-6ba98584">14.89375</span></p></td><td class="cl-6baeb536"><p class="cl-6bae9902"><span class="cl-6ba98584">2014-11-24</span></p></td><td class="cl-6baeb540"><p class="cl-6bae9902"><span class="cl-6ba98584">16</span></p></td><td class="cl-6baeb54a"><p class="cl-6bae98ee"><span class="cl-6ba98584">40%</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-6baeb54b"><p class="cl-6bae98ee"><span class="cl-6ba98584">SMMH</span></p></td><td class="cl-6baeb554"><p class="cl-6bae9902"><span class="cl-6ba98584">29</span></p></td><td class="cl-6baeb55e"><p class="cl-6bae9902"><span class="cl-6ba98584">15.93103</span></p></td><td class="cl-6baeb568"><p class="cl-6bae9902"><span class="cl-6ba98584">2014-11-28</span></p></td><td class="cl-6baeb57c"><p class="cl-6bae9902"><span class="cl-6ba98584">17</span></p></td><td class="cl-6baeb586"><p class="cl-6bae98ee"><span class="cl-6ba98584">59%</span></p></td></tr></tbody></table></div></template> <div class="flextable-shadow-host" id="f0e0d285-55dc-4f6a-9465-11c85017c20d"></div> <script> var dest = document.getElementById("f0e0d285-55dc-4f6a-9465-11c85017c20d"); var template = document.getElementById("8801253f-22d5-4566-88ff-b39c5c3079f9"); var caption = template.content.querySelector("caption"); var fantome = dest.attachShadow({mode: 'open'}); var templateContent = template.content; fantome.appendChild(templateContent); </script> --- class: inverse, center, middle ## {gtsummary} - красота <img src="../../../../images/grouping/beauty.png" width="65%" /> --- # `tbl_summary()` * Вывод по умолчанию должен быть *готовым к публикации*. -- .pull-left[ ```r surv %>% * select(hospital, age_years) ``` Выберите столбцы для сводки. Для демонстрации: * Столбец из одного символа (`больница`) * Один числовой столбец (`age_years`) ] --- # `tbl_summary()` * Вывод по умолчанию должен быть *готовым к публикации*. .pull-left[ ```r surv %>% select(hospital, age_years) %>% * tbl_summary() ``` Выберите столбцы для сводки. Для демонстрации: * Столбец из одного символа (`больница`) * Один числовой столбец (`age_years`) ] -- .pull-right[
Characteristic
N = 539
1
hospital
Central Hospital
40 (9.9%)
Military Hospital
78 (19%)
Other
85 (21%)
Port Hospital
174 (43%)
SMMH
29 (7.1%)
Unknown
133
age_years
13 (6, 23)
Unknown
6
1
n (%); Median (IQR)
] --- # `tbl_summary()` * Стратификация по другой переменной .pull-left[ ```r surv %>% select(hospital, age_years, gender) %>% * tbl_summary(by = gender) ``` См. советы по настройке в главе [Epi R Handbook, посвященной описательным таблицам](https://epirhandbook.com/en/descriptive-tables.html#tbl_gt).) ] -- .pull-right[
Characteristic
female
, N = 275
1
male
, N = 246
1
age_years
11 (5, 19)
17 (7, 28)
hospital
Central Hospital
16 (7.8%)
23 (12%)
Military Hospital
34 (17%)
41 (22%)
Other
44 (21%)
37 (20%)
Port Hospital
95 (46%)
73 (39%)
SMMH
17 (8.3%)
11 (5.9%)
Unknown
69
61
1
Median (IQR); n (%)
] --- # `tbl_summary()` * Настройте подписи .pull-left[ ```r surv %>% select(hospital, age_years, gender) %>% tbl_summary( by = gender, label = list( age_years = "Age (years)", hospital = "Hospital")) ``` См. советы по настройке в главе [Epi R Handbook, посвященной описательным таблицам](https://epirhandbook.com/en/descriptive-tables.html#tbl_gt).) ] -- .pull-right[
Characteristic
female
, N = 275
1
male
, N = 246
1
Hospital
Central Hospital
16 (7.8%)
23 (12%)
Military Hospital
34 (17%)
41 (22%)
Other
44 (21%)
37 (20%)
Port Hospital
95 (46%)
73 (39%)
SMMH
17 (8.3%)
11 (5.9%)
Unknown
69
61
Age (years)
11 (5, 19)
17 (7, 28)
1
n (%); Median (IQR)
] --- class: inverse, center, middle ## Что использовать? В R у вас есть много вариантов. Закрепите знание инструмента, который вам подходит. <img src="../../../../images/grouping/choices.png" width="90%" />