Формат таблицы сетки в R - PullRequest
       9

Формат таблицы сетки в R

0 голосов
/ 14 декабря 2018

Я использую пакет Expss для создания таблиц в R. У меня 5 заявлений, в каждом утверждении есть 5 брендов.5 Операторы представлены в 5 последовательных переменных, таких как a1, a2, a3, a4, a5 Могу ли я иметь таблицу в формате сетки, как показано ниже?

введите описание изображения здесь

1 Ответ

0 голосов
/ 17 декабря 2018

Существует два решения: одно - подробное, но не масштабируемое, второе - масштабируемое, но не очень простое.Оба решения основаны на идее, что мы перемещаем метки из переменных в местоположение баннера.

    library(expss)
    # create sample of data
    set.seed(123)
    N = 150
    df = data.frame(
        st1 = sample(paste0("brand", 1:5), N, replace = TRUE),
        st2 = sample(paste0("brand", 1:5), N, replace = TRUE),
        st3 = sample(paste0("brand", 1:5), N, replace = TRUE),
        st4 = sample(paste0("brand", 1:5), N, replace = TRUE),
        st5 = sample(paste0("brand", 1:5), N, replace = TRUE)
    ) %>% apply_labels(
                       st1 = 'Statement 1', 
                       st2 = 'Statement 2', 
                       st3 = 'Statement 3', 
                       st4 = 'Statement 4', 
                       st5 = 'Statement 5' 
                       )

    # verbose solution with Tab_*. It is not scalable for large number of variables 
    # manipulation with variable labels is needed to repostion variable labels from rows to column
    df %>% 
        tab_total_row_position("above") %>% 
        tab_cells("|" = drop_var_labs(st1)) %>%
        tab_stat_cpct(label = var_lab(st1)) %>% 
        tab_cells("|" = drop_var_labs(st2)) %>% 
        tab_stat_cpct(label = var_lab(st2)) %>% 
        tab_cells("|" = drop_var_labs(st3)) %>% 
        tab_stat_cpct(label = var_lab(st3)) %>% 
        tab_cells("|" = drop_var_labs(st4)) %>% 
        tab_stat_cpct(label = var_lab(st4)) %>% 
        tab_cells("|" = drop_var_labs(st5)) %>%
        tab_stat_cpct(label = var_lab(st5)) %>% 
        tab_pivot(stat_position = "inside_columns")  %>% 
        tab_transpose() 

    # solution wich will work for arbirary number of variables
    df %>% 
        calculate(
            lapply(st1 %to% st5, function(item)
                # manipulation with variable labels is needed to repostion variable labels from rows to column
                cro(list(drop_var_labs(item)), list(var_lab(item)), total_row_position = "above")
            )
        ) %>% 
        Reduce("%merge%", .) %>% 
        tab_transpose()
...