【问题标题】:How to convert a list into a complex table with rearranged and individually named columns?如何将列表转换为具有重新排列和单独命名列的复杂表?
【发布时间】:2019-05-29 15:44:59
【问题描述】:

我有一个包含 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.error 值(最好与重要性星一起 - p.value

我还没有想出如何将我的列表转换成这种表格,如果我仍然是 R 的初学者,我将不胜感激!谢谢。

【问题讨论】:

  • 为了以后省事,千万不要把列表称为“列表”!
  • ***p.value 不同步
  • @akrun 抱歉修复了它

标签: r


【解决方案1】:

我们可以使用map from purrrlistmutate 的data.frame 列'std.error' 循环到format,通过在"***" 时将"***" 连接成一个字符串@ 小于 0.25 否则将列返回为 character 类型(case_when 检查类型),select 感兴趣的列,转置(t),转换为 data.frame,并创建一个 id 列'Firm' 基于list 的名称(默认情况下,如果没有名称,则添加序列号)。请注意,map 返回一个list,而后缀_df 将其转换为通过绑定list 元素的行输出的单个data.frame

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

【讨论】:

  • 不幸的是,这只是重新排列了我的数据,但它仍然在列表中,而不是我需要的格式......
  • @User2010S 使用map_df 而不是map
  • 请显示您的代码结果,以便与 OP 的期望进行比较。谢谢。
  • @User2010S 您可以在t 步骤之前使用select。更新了帖子
  • @akrun 太棒了,我在间隔休息时更改了它。非常感谢您的帮助!!!
猜你喜欢
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 2022-01-13
  • 2022-01-23
相关资源
最近更新 更多