从人口数据框创建多个数据框的循环
A loop to create multiple data frames from a population data frame
假设我有一个名为 pop 的数据框,我希望通过一个名为 replicate 的分类变量来拆分该数据框。此副本包含 110 个类别,我希望对每个数据框进行分析,然后必须组合每个数据框的输出以创建一个新的数据框。换句话说,假设它是复制 i 那么我希望创建数据框 i 并对 i 执行逻辑回归并为 i 保存 beta 0。所有 beta 0 将合并创建一个 table,所有 beta 0 用于复制 1-110。
我知道那是一个满嘴但提前感谢。
由于您没有提供一些示例数据,我将使用 mtcars
。您可以使用 split
在分类值上拆分 data.frame。将其与 purrr
和 broom
包中的 map
和 tidy
相结合,您可以一次性创建一个包含所有测试版的数据框。
所以发生的事情是 1:拆分 data.frame,2:运行 回归模型 3:整理数据以获取系数并创建数据的 data.frame。
您需要将其调整为您的 data.frame 并复制变量。 Broom 可以处理逻辑回归,所以一切都会顺利进行。
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
假设我有一个名为 pop 的数据框,我希望通过一个名为 replicate 的分类变量来拆分该数据框。此副本包含 110 个类别,我希望对每个数据框进行分析,然后必须组合每个数据框的输出以创建一个新的数据框。换句话说,假设它是复制 i 那么我希望创建数据框 i 并对 i 执行逻辑回归并为 i 保存 beta 0。所有 beta 0 将合并创建一个 table,所有 beta 0 用于复制 1-110。 我知道那是一个满嘴但提前感谢。
由于您没有提供一些示例数据,我将使用 mtcars
。您可以使用 split
在分类值上拆分 data.frame。将其与 purrr
和 broom
包中的 map
和 tidy
相结合,您可以一次性创建一个包含所有测试版的数据框。
所以发生的事情是 1:拆分 data.frame,2:运行 回归模型 3:整理数据以获取系数并创建数据的 data.frame。
您需要将其调整为您的 data.frame 并复制变量。 Broom 可以处理逻辑回归,所以一切都会顺利进行。
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