我有一个包含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,(拦截),x $ Return和x $ ReturnDum)和30行,每行一行。每行应包含公司名称(在Firm公司下),估计值和剩余每一列的std.error值(最好与显着性星一起使用-3个星表示p值<0.01,2个星表示p p值<0.05,并且1颗星表示p值<0.1,上面的所有值都没有星号。
我还没有弄清楚如何将我的列表转换成这种类型的表,希望对我有所帮助,因为我仍然是R的初学者!谢谢。
答案 0 :(得分:2)
我们可以使用map
中的purrr
将list
,mutate
的data.frame列“ std.error”循环到format
到通过在"***"
小于0.25时串联p.value
来返回字符串,否则以character
类型(case_when
检查类型),select
列感兴趣,转置(t
,转换为data.frame,并根据list
的名称创建id列“ Firm”(默认情况下,如果没有名称,则添加序列号) 。请注意,map
返回list
,而后缀_df
将其转换为单个data.frame通过行绑定list
元素而输出
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")