首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用lapply函数,使用broom::tidy将回归输出列表转换为数据框?

如何使用lapply函数,使用broom::tidy将回归输出列表转换为数据框?
EN

Stack Overflow用户
提问于 2019-05-16 22:22:42
回答 1查看 361关注 0票数 2

我有一个包含多个数据帧的列表。每个数据框包含三列(ColumnOne、ColumnTwo和ColumnThree)。

代码语言:javascript
复制
list <- list(df1, df2, df3)

我正在使用lapply在每个数据帧上运行回归。

代码语言:javascript
复制
regression <- lapply(list, function (x) 
  lm(x$ColumnOne ~ x$ColumnTwo + x$ColumnThree))

当我显示回归的输出时,一切似乎都是正确的。

现在,我想使用broom::tidy来收集表中每个数据帧的回归输出。

代码语言:javascript
复制
library(broom)
df <- lapply(regression, function(x)
  tidy(regression$x))
df

然而,当我显示df时,它只显示空的(0x0)数据帧。

将非常感谢您的帮助!

EN

回答 1

Stack Overflow用户

发布于 2019-06-20 03:41:23

对于这样的应用程序,我建议以一种稍微不同的方式使用这个broom包。下面是操作步骤:

代码语言:javascript
复制
require(broom)

# simulate data
make_df <- function(){data.frame(ColumnOne = rnorm(5), 
                                 ColumnTwo=rnorm(5),
                                 ColumnThree=rnorm(5)
                                 )
                     }

my_list <- list(df1 = make_df(), 
                df2 = make_df(),
                df3=make_df()
                )

# bind the rows of the dataframe together and group by origin
my_list %>% 
     bind_rows(.id='df') %>% 
     group_by(df) %>% 
     do(tidy(lm(data=., 
                formula=ColumnOne ~ ColumnTwo + ColumnThree
                )
             )
        )

我制作的随机玩具数据的结果是一个数据帧,看起来像这样:

代码语言:javascript
复制
 A tibble: 9 x 6
# Groups:   df [3]
  df    term        estimate std.error statistic p.value
  <chr> <chr>          <dbl>     <dbl>     <dbl>   <dbl>
1 df1   (Intercept)  -1.23      0.840     -1.47  0.280  
2 df1   ColumnTwo     0.944     0.573      1.65  0.241  
3 df1   ColumnThree  -0.532     0.486     -1.09  0.388  
4 df2   (Intercept)   0.942     0.718      1.31  0.320  
5 df2   ColumnTwo     0.900     1.02       0.885 0.470  
6 df2   ColumnThree  -0.0596    0.443     -0.135 0.905  
7 df3   (Intercept)   0.0453    0.0742     0.610 0.604  
8 df3   ColumnTwo     0.554     0.0509    10.9   0.00833
9 df3   ColumnThree  -0.229     0.114     -2.00  0.183  

Broom的设计策略是尽可能多地使用数据帧。如果您从具有相同列的数据帧列表开始,则更容易将它们组合到一个数据帧中,之后,您可以直接处理它,而不必对列表进行函数式编程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56170796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档