首页 > 解决方案 > 如何将列表转换为具有重新排列和单独命名列的复杂表?

问题描述

我有一个包含 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)
...

基本上,它应该包含四列(称为公司、(拦截)、x$Return 和 x$ReturnDum)和 30 行,每个公司一行。每行应包含公司名称(在公司下)、估计值和每个剩余列的 std.error 值(最好与重要性星一起 - p.value < 0.01 为 3 星,p.value < 0.01 为 2 星p.value < 0.05 和 p.value < 0.1 的 1 星,以上所有内容都没有星)。

我还没有弄清楚如何将我的列表转换成这种表格,并且由于我仍然是 R 的初学者,因此我将不胜感激!谢谢。

标签: r

解决方案


我们可以使用mapfrompurrr循环遍历listdata.framemutate列 'std.error'通过在小于 0.25时format连接成字符串,否则将列作为类型​​(检查类型)返回,感兴趣的列,转置( ),转换为data.frame,并根据名称创建一个id列'Firm' (默认情况下,如果没有名称,则添加序号)。请注意,返回 a ,而后缀将其转换为通过绑定元素的行输出的单个 data.frame"***"p.valuecharactercase_whenselecttlistmaplist_dflist

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')

对于多个类别,更简单的选择是cutfindInterval

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")

推荐阅读