Как преобразовать список в сложную таблицу с переставленными и индивидуально именованными столбцами? - PullRequest
1 голос
/ 29 мая 2019

У меня есть список (называемый списком) с 30 фреймами данных, которые имеют индивидуальные имена (названные в честь фирм) и состоят из результатов регрессии.Все кадры данных выглядят так:

term         estimate std.error statistic p.value
(Intercept)  0.0012   0.000     2.84      0.00
x$Return     0.8119   0.055     14.49     1.08
x$ReturnDum  0.2989   0.083     0.10      0.05

Для моего вывода мне нужен файл (pdf или png) с таблицей регрессии, которая состоит из всех выходных данных выше.Таблица должна выглядеть примерно так:

Firm    (Intercept)  x$Return    x$ReturnDum
Firm1    0.0012       0.8119      0.2989
        (0.000)***   (0.055)     (0.083)**
Firm2    0.0242       0.2359      0.0239
        (0.000)***   (0.050)**   (0.909)
...

По сути, она должна содержать четыре столбца (называемые Firm, (Intercept), x $ Return и x $ ReturnDum) и 30 строк, по одной строке для каждой фирмы.Каждая строка должна содержать название фирмы (в разделе Фирма), значение оценки и значение ошибки std.eror для каждого оставшегося столбца (предпочтительно вместе со значимыми звездами - 3 звезды для значения p. <0,01, 2 звезды дляp.value <0,05 и 1 звезда для p.value <0,1, звездочка для всего вышеперечисленного отсутствует. </p>

Я не понял, как преобразовать свой список в таблицу такого типа, и был бы признателен за любую помощькак я еще новичок с R!Спасибо.

1 Ответ

2 голосов
/ 29 мая 2019

Мы можем использовать map из purrr для циклического перебора list, mutate столбца data.frame 'std.error' в format в строку путем объединения "***", когда p.value меньше 0,25 или возвращает столбец как character тип (case_when тип проверки), select интересующий столбец, транспонировать (t), преобразовать в data.frame и создать столбец id «Фирма» основана на именах list (по умолчанию, если имен нет, добавляется порядковый номер). Обратите внимание, что map возвращает list, в то время как суффикс _df преобразует его в один вывод data.frame путем связывания строки list elements

library(tidyverse)
map_df(lst1, ~ 
          .x  %>%
          mutate(std.error = case_when(p.value < 0.05 ~
                   str_c("(", std.error, ")", "***"), 
                     TRUE ~ as.character(std.error)), 
                 estimate = round(estimate, 3)) %>%        
          select(estimate, std.error) %>%
          t %>%
           as.data.frame , .id = 'Firm')

Для нескольких категорий более простым вариантом является cut или findInterval

map_df(lst1, ~ 
     .x %>%
       mutate(std.error = str_c("(", round(std.error, 3), ")", 
            c("****", "***", "**", "*")[findInterval(p.value, 
            c(0.01, 0.05, 0.1))+1]),
            estimate = round(estimate, 3)) %>%
       select(estimate, std.error) %>%
       t %>%
       as.data.frame %>% 
       rename_all(~ c("Intercept)",  "x$Return",    "x$ReturnDum")), .id = "Firm")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...