Изменить порядок, в котором сводные функции печатаются ским - PullRequest
3 голосов
/ 18 марта 2019

Я использую skimr, и я добавил две функции сводки (iqr_na_rm и median_na_rm) в список функций сводки для функции skim.Однако по умолчанию эти новые сводные функции (называемые skimmers в документации skimr) появляются в конце таблицы.Вместо этого я бы хотел, чтобы median и iqr появлялись после mean и sd.

Конечная цель - показать результаты в отчете .Rmd, например:

---
title: "Test"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(warning = FALSE, 
                      message = FALSE,
                      echo    = FALSE)
```

## Test

```{r test, results = 'asis'}
library(skimr)
library(dplyr)
library(ggplot2)

iqr_na_rm <- function(x) IQR(x, na.rm = TRUE)
median_na_rm <- function(x) median(x, na.rm = TRUE)

skim_with(numeric = list(p50 = NULL, median = median_na_rm, iqr = iqr_na_rm),
          integer = list(p50 = NULL, median = median_na_rm, iqr = iqr_na_rm))

msleep %>%
  group_by(vore) %>%
  skim(sleep_total) %>%
  kable()

```

Визуализированный HTML:

enter image description here

Как видите, median и iqr печатаются и в конце таблицы после гистограммы спарклайна.Я бы хотел, чтобы они были напечатаны после sd и до p0.Возможно ли это?

Ответы [ 2 ]

3 голосов
/ 18 марта 2019

На выходе skim() есть две части. Если вы хотите управлять числовой частью, вы можете использовать skim_to_list следующим образом. Также проще экспортировать в другой формат.

msleep %>%
  group_by(vore) %>%
  skim_to_list(sleep_total)%>%
  .[["numeric"]]%>%
  dplyr::select(vore,variable,missing,complete,n,mean,sd,
                median,iqr,p0,p25,p75,p100,hist)

# A tibble: 5 x 14
  vore    variable    missing complete n     mean    sd     median iqr     p0    p25    p75     p100   hist    
* <chr>   <chr>       <chr>   <chr>    <chr> <chr>   <chr>  <chr>  <chr>   <chr> <chr>  <chr>   <chr>  <chr>   
1 carni   sleep_total 0       19       19    10.38   4.67   10.4   " 6.75" 2.7   6.25   "13   " 19.4   ▃▇▂▇▆▃▂▃
2 herbi   sleep_total 0       32       32    " 9.51" 4.88   10.3   " 9.92" 1.9   "4.3 " 14.22   16.6   ▆▇▁▂▂▆▇▅
3 insecti sleep_total 0       5        5     14.94   5.92   18.1   "11.1 " 8.4   "8.6 " "19.7 " 19.9   ▇▁▁▁▁▁▃▇
4 omni    sleep_total 0       20       20    10.93   2.95   " 9.9" " 1.83" "8  " "9.1 " 10.93   "18  " ▆▇▂▁▁▁▁▂
5 NA      sleep_total 0       7        7     10.19   "3   " 10.6   " 3.5 " 5.4   8.65   12.15   13.7   ▃▃▁▁▃▇▁▇

EDIT

Добавление kable() согласно запросу в комментарии.

msleep %>%
  group_by(vore) %>%
  skim_to_list(sleep_total)%>%
  .[["numeric"]]%>%
  dplyr::select(vore,variable,missing,complete,n,mean,sd,median,iqr,p0,p25,p75,p100,hist)%>%
  kable()

|  vore   |  variable   | missing | complete | n  | mean  |  sd  | median | iqr  | p0  | p25  |  p75  | p100 |   hist   |
|---------|-------------|---------|----------|----|-------|------|--------|------|-----|------|-------|------|----------|
|  carni  | sleep_total |    0    |    19    | 19 | 10.38 | 4.67 |  10.4  | 6.75 | 2.7 | 6.25 |  13   | 19.4 | ▃▇▂▇▆▃▂▃ |
|  herbi  | sleep_total |    0    |    32    | 32 | 9.51  | 4.88 |  10.3  | 9.92 | 1.9 | 4.3  | 14.22 | 16.6 | ▆▇▁▂▂▆▇▅ |
| insecti | sleep_total |    0    |    5     | 5  | 14.94 | 5.92 |  18.1  | 11.1 | 8.4 | 8.6  | 19.7  | 19.9 | ▇▁▁▁▁▁▃▇ |
|  omni   | sleep_total |    0    |    20    | 20 | 10.93 | 2.95 |  9.9   | 1.83 |  8  | 9.1  | 10.93 |  18  | ▆▇▂▁▁▁▁▂ |
|   NA    | sleep_total |    0    |    7     | 7  | 10.19 |  3   |  10.6  | 3.5  | 5.4 | 8.65 | 12.15 | 13.7 | ▃▃▁▁▃▇▁▇ |
1 голос
/ 21 марта 2019

Вот еще одна опция, которая использует опцию append = FALSE.

library(skimr)
library(dplyr)
library(ggplot2)

iqr_na_rm <- function(x) IQR(x, na.rm = TRUE)
median_na_rm <- function(x) median(x, na.rm = TRUE)

my_skimmers <- list(n = length, missing = n_missing, complete = n_complete,
                     mean = mean.default, sd = purrr::partial(sd, na.rm = TRUE),
                     median = median_na_rm,  iqr = iqr_na_rm
                    )

skim_with(numeric = my_skimmers,
     integer = my_skimmers, append = FALSE)

msleep %>%
  group_by(vore) %>%
  skim(sleep_total) %>%
  kable()

Я не поместил всю статистику, но вы можете посмотреть в файлах functions.R и stats.R, чтобы увидеть, как определяется различная статистика.

...