我有一个包含多个数据帧的列表。每个数据框包含三列(ColumnOne、ColumnTwo和ColumnThree)。
list <- list(df1, df2, df3)
我正在使用lapply在每个数据帧上运行回归。
regression <- lapply(list, function (x)
lm(x$ColumnOne ~ x$ColumnTwo + x$ColumnThree))
当我显示回归的输出时,一切似乎都是正确的。
现在,我想使用broom::tidy来收集表中每个数据帧的回归输出。
library(broom)
df <- lapply(regression, function(x)
tidy(regression$x))
df
然而,当我显示df时,它只显示空的(0x0)数据帧。
将非常感谢您的帮助!
发布于 2019-06-20 03:41:23
对于这样的应用程序,我建议以一种稍微不同的方式使用这个broom包。下面是操作步骤:
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
)
)
)
我制作的随机玩具数据的结果是一个数据帧,看起来像这样:
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的设计策略是尽可能多地使用数据帧。如果您从具有相同列的数据帧列表开始,则更容易将它们组合到一个数据帧中,之后,您可以直接处理它,而不必对列表进行函数式编程。
https://stackoverflow.com/questions/56170796
复制相似问题