Заголовки столбцов и подзаголовки с уровней - PullRequest
0 голосов
/ 26 мая 2020

Мне это кажется очевидным на концептуальном уровне, но почему-то я не могу понять, как это сделать в R. У меня есть фрейм данных с двумя переменными, каждая из которых привязана к 9 уровням, например:

data frame with 2 variables having 9 levels

Чтобы быть более дружелюбным для возможных пользователей и читателей, я хочу, чтобы это выглядело немного более интерпретируемым, например:

desired lay out for publication

Но каков правильный инструмент и / или подход для этого в R? Я пробовал ftable и xtable, но проблема в том, что нет дополнительных исходных «сырых» данных, в то время как ftable / xtable требуют именно таких данных, выложенных в виде таблицы непредвиденных обстоятельств для получения подсчетов, и означает et c. Самое близкое, что у меня получилось, - это попытка отформатировать таблицу вручную с помощью flextable.

Может быть, это слишком скромная задача для R? Следует ли мне использовать другой инструмент / язык?

Спасибо за любые указатели --J.

- EDIT_20200528_2141:

Как отмечает @LenGreski, tables::tabular() обеспечивает это ( см .: https://cran.r-project.org/web/packages/tables/tables.pdf). Я просто хотел указать на конкретное c отличие от того, что объясняется в решении , указанном выше . Это решение предполагает, что у вас есть числа, которые можно подсчитать и усреднить, в моем случае у меня просто это:

     genre origin      mean       stdv
1  Western     PL 0.3213601 0.19510242
2  Western     IT 0.2502920 0.26645386
3  Western     US 0.4688884 0.06305476
4 Thriller     PL 0.3117736 0.17128256
5 Thriller     IT 0.1970238 0.27456382
6 Thriller     US 0.4371585 0.10925573
7 Romantic     PL 0.3334293 0.20280193
8 Romantic     IT 0.2502829 0.31400158
9 Romantic     US 0.4629377 0.02612357

Итак, нет базовых данных, только средства и sds, вот и все . Это может поставить вас в затруднительное положение, поскольку tabular() действительно хочет подсчитывать и усреднять частоты самостоятельно. Таким образом, стандартное решение побуждает вас сделать следующее:

tabular( Factor(genre) ~ Factor(origin) * ( mean + stdv ), data=movies )

Сначала это выглядит загадочно c, но как только вы получите обозначение, это действительно имеет смысл. Внимательно изучите документацию (стр. 26-29). Это работает:

          origin                         
          IT          PL        US       
 genre    mean   stdv mean stdv mean stdv
 Romantic 1      1    1    1    1    1   
 Thriller 1      1    1    1    1    1   
 Western  1      1    1    1    1    1   

Вы получаете только единицы, потому что tabular подсчитывает вхождения средств и sds, которые в этом случае, таким образом, все появляются один раз. Решение намечено на стр. 26: «Если термин оценивает функцию, это должна быть итоговая функция, которая производит скалярное значение при применении к вектору значений, и этот скаляр будет отображаться в таблице». Это немного хакерский sh, но это означает, что мы можем решить нашу проблему, предоставив «сводную» функцию, которая просто возвращает то же самое, что и ввод:

do_nothing <- function(X) {
    X
}
tabular( Factor(genre) ~ Factor(origin) * ( do_nothing*mean + do_nothing*stdv ), data=movies )

И мы получаем:

          origin                                                           
          IT                    PL                    US                   
          do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing
 genre    mean       stdv       mean       stdv       mean       stdv      
 Romantic 0.2503     0.3140     0.3334     0.2028     0.4629     0.02612   
 Thriller 0.1970     0.2746     0.3118     0.1713     0.4372     0.10926   
 Western  0.2503     0.2665     0.3214     0.1951     0.4689     0.06305   

Остался только бесполезный заголовок. Мы можем избавиться от этого с помощью псевдофункции Heading():

tabular( Factor(genre) ~ Factor(origin) * ( Heading()*do_nothing*mean + Heading()*do_nothing*stdv ), data=movies )

И, наконец, у нас есть:

          origin                                    
          IT            PL            US            
 genre    mean   stdv   mean   stdv   mean   stdv   
 Romantic 0.2503 0.3140 0.3334 0.2028 0.4629 0.02612
 Thriller 0.1970 0.2746 0.3118 0.1713 0.4372 0.10926
 Western  0.2503 0.2665 0.3214 0.1951 0.4689 0.06305

Это работает, отлично. Вопрос для размышления: есть ли более аккуратный, менее хакерский sh способ добиться этого, если у нас нет базовых данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...