Таблица сопряженности уценки R%>% табличных переменных столбца с выборочными значениями - PullRequest
1 голос
/ 03 мая 2020

Я новичок в R, пришедший из Stata. Ниже приведен пример блока уценки с воспроизводимыми данными. Данные являются репрезентативными для данных, с которыми я работаю. Но только с большим количеством двоичных (логических) и факторных переменных в количестве.

Библиотеки и данные:

# Setup and load package:
library(dplyr)
library(expss)
library(hablar)
library(kableExtra)
library(summarytools)

# Load data:
data("mtcars")
raw_df <- select(mtcars,c(wt,cyl,gear,vs,am))

# Data prep and labelling:
df <- raw_df %>%
  apply_labels(wt = "Facility ID",
               cyl = "Geographical Area",
               cyl = c("Area A" = 4,"Area B" = 6, "Area C" = 8),
               gear = "Tier",
               gear = c("Tier 1" = 3, "Tier 2" = 4, "Tier 3" = 5),
               vs = "E.coli",
               am = "V.choleri") %>%
  convert(chr(wt),
          fct(cyl,gear),
          lgl(vs,am))

Обратите внимание, что в моих реальных данных есть более категориальные и логические переменные. Мне удалось сделать следующую таблицу в r уценке (html вывод):


df %>%
  tab_cells(cyl, gear) %>%
  tab_total_row_position("below") %>%
  tab_total_statistic("u_rpct")%>%
  tab_total_label("Total hosts (Row proportions)") %>% 
  tab_cols(vs, am) %>% 
  tab_stat_rpct() %>% 
  tab_cols(total(label = "Number of hosts")) %>%  
  tab_stat_cases() %>%
  tab_pivot(stat_position = "outside_columns") %>%
  recode(as.criterion(is.numeric) & is.na ~ 0, TRUE ~ copy) %>% 
  split_table_to_df() %>% 
  kable(align = "c", digits = 1) %>% 
  kable_styling(bootstrap_options = c("striped", "condensed", "responsive"),
                full_width = F, position = "center") %>% 
  row_spec(1:2, bold = TRUE)

Проблемы: 1. Я мог sh я мог бы включать только столбцы "ИСТИНА", удаляя столбцы "ЛОЖЬ" из таблицы. Но сохраняя метку 1-й строки в целости и сохранности ("E. coli", "V.choleri"). На самом деле мне не понадобится второй ряд («ИСТИНА», «ЛОЖЬ») 2. Я пометил «Общая пропорция строк» ​​(#Total hosts), но не могу удалить ведущий знак «#». Ячейка столбца строки с «Общая пропорция строки», она показывает «100». Я попытался вместо этого суммировать ячейки столбца, но не смог. «100» вводит в заблуждение. 3. Я также пытался получить мой желаемую таблицу с помощью функции "ctable" пакета "summarytools". Так как она имеет превосходную структуру, с количеством наблюдений, также индуцированных в ячейках пропорций: пара категориальных переменных. А также «ЛОЖЬ» не может быть опущена. Но последний столбец идеально подходит для итоговых строк (наблюдений)

Детали: R: 4.0.0 R studio: 1.2.5042 Пакеты все в актуальном состоянии.

1 Ответ

1 голос
/ 03 мая 2020

Таблицы из expss - это обычные данные. Метки столбцов - это просто имена столбцов со строками, разделенными «|» символ. Таким образом, вы можете манипулировать ими как обычными именами столбцов. Метки строк расположены в столбце row_labels, и мы можем удалить знак «#» с помощью операций поиска и замены. «Общая пропорция строки» показывает «100», потому что в начале вы указываете общую статистику c, так как процент строки и процент строки для одного столбца равны 100. С учетом всего вышеперечисленного:

library(dplyr)
library(expss)
library(hablar)
library(kableExtra)
library(summarytools)

# Load data:
data("mtcars")
raw_df <- select(mtcars,c(wt,cyl,gear,vs,am))

# Data prep and labelling:
df <- raw_df %>%
    apply_labels(wt = "Facility ID",
                 cyl = "Geographical Area",
                 cyl = c("Area A" = 4,"Area B" = 6, "Area C" = 8),
                 gear = "Tier",
                 gear = c("Tier 1" = 3, "Tier 2" = 4, "Tier 3" = 5),
                 vs = "E.coli",
                 am = "V.choleri") %>%
    convert(chr(wt),
            fct(cyl,gear),
            lgl(vs,am))


tbl = df %>%
    tab_cells(cyl, gear) %>%
    tab_total_row_position("below") %>%
    tab_total_statistic("u_rpct")%>%
    tab_total_label("Total hosts (Row proportions)") %>% 
    tab_cols(vs, am) %>% 
    tab_stat_rpct() %>% 
    tab_cols(total(label = "Number of hosts")) %>%  
    # specify total statistic for last column
    tab_stat_cases(total_statistic = "u_cases") %>%
    tab_pivot(stat_position = "outside_columns") %>%
    recode(as.criterion(is.numeric) & is.na ~ 0, TRUE ~ copy) %>% 
    # remove columns with FALSE
    except(contains("FALSE")) %>% 
    compute(
        # remove '#' sign from row labels
        row_labels = gsub("#", "", row_labels)
    )

# remove '#' sign from column labels
colnames(tbl) = gsub("\\|TRUE", "", colnames(tbl))

tbl %>% 
    split_table_to_df() %>% 
    kable(align = "c", digits = 1) %>% 
    kable_styling(bootstrap_options = c("striped", "condensed", "responsive"),
                  full_width = F, position = "center") %>% 
    row_spec(1:2, bold = TRUE)
...