从群体数据框创建多个数据帧的循环

时间:2018-05-21 09:02:45

标签: r group-by summarization split-apply-combine

假设我有一个名为pop的数据框,我希望通过一个名为replicate的分类变量来分割这个数据框。此复制包含110个类别,我希望对每个数据框执行分析,然后必须组合每个数据框的输出以创建新数据框。换句话说,假设它是复制的,那么我希望创建数据框i并对i执行逻辑回归并为i保存beta 0。将所有beta 0组合起来创建一个表,其中所有beta 0都用于复制1-110。 我知道这是一个满嘴的但是提前感谢。

1 个答案:

答案 0 :(得分:0)

由于您没有提供一些示例数据,我将使用mtcars。您可以使用split在分类值上拆分data.frame。将其与maptidy软件包中的purrrbroom相结合,您可以一次性创建包含所有测试版的数据框。

所以会发生什么是1:拆分data.frame,2:运行回归模型3:整理数据以获取系数并创建数据的数据框。

您需要将其调整为data.frame和复制变量。扫帚可以处理逻辑回归,所以一切都应该解决。

library(purrr)
library(broom)

my_lms <- mtcars %>%
  split(.$cyl) %>%
  map(~ lm(mpg ~ wt, data = .x)) %>%
  map_dfr(~ tidy(.))

my_lms
         term  estimate std.error statistic      p.value
1 (Intercept) 39.571196 4.3465820  9.103980 7.771511e-06
2          wt -5.647025 1.8501185 -3.052251 1.374278e-02
3 (Intercept) 28.408845 4.1843688  6.789278 1.054844e-03
4          wt -2.780106 1.3349173 -2.082605 9.175766e-02
5 (Intercept) 23.868029 3.0054619  7.941551 4.052705e-06
6          wt -2.192438 0.7392393 -2.965803 1.179281e-02

修改

my_lms <- lapply(split(mtcars, mtcars$cyl), function(x) lm(mpg ~ wt, data = x))
my_coefs <- as.data.frame(sapply(my_lms, coef))
my_coefs
                    4         6         8
(Intercept) 39.571196 28.408845 23.868029
wt          -5.647025 -2.780106 -2.192438

#Or transpose the coefficents if you want column results.
t(my_coefs)
  (Intercept)        wt
4    39.57120 -5.647025
6    28.40884 -2.780106
8    23.86803 -2.192438