在模拟工作中,我有多个具有相同列变量但行不同的数据集,并且这些数据集基于n
模拟,每个数据集的样本大小。例如:
n.vec = c(5, 10, 15, 20)
data1 = data.frame(x=rnorm(n.vec[1], 0, 1), y=rnorm(n.vec[1], 0, 1))
data2 = data.frame(x=rnorm(n.vec[2], 1, 2), y=rnorm(n.vec[2], 1, 2))
data3 = data.frame(x=rnorm(n.vec[3], 3, 4), y=rnorm(n.vec[3], 3, 4))
data4 = data.frame(x=rnorm(n.vec[4], 5, 6), y=rnorm(n.vec[4], 5, 6))
mega.data = rbind(data1, data2, data3, data4)
现在不使用循环(n.vec
可以是任意长度),是否有一种有效的方法将所有数据集绑定到单个数据集"比如上面的mega.data
?最好使用dplyr
包。感谢。
答案 0 :(得分:2)
一种简单的方法是在数据框中收集参数,然后使用purrr::pmap
迭代其行以生成所需的数据框。其pmap_df
变体将在结果上调用dplyr::bind_rows
,将它们绑定到单个数据框中。
library(tidyverse)
set.seed(47)
mega_data <- data_frame(n = c(5, 10, 15, 20),
mean = c(0, 1, 3, 5),
sd = c(1, 2, 4, 6)) %>%
pmap_df(~list(x = rnorm(...),
y = rnorm(...)))
mega_data
#> # A tibble: 50 x 2
#> x y
#> <dbl> <dbl>
#> 1 1.99 -1.09
#> 2 0.711 -0.985
#> 3 0.185 0.0151
#> 4 -0.282 -0.252
#> 5 0.109 -1.47
#> 6 -0.845 -2.13
#> 7 1.08 1.50
#> 8 1.99 0.319
#> 9 -2.66 1.83
#> 10 1.18 0.347
#> # ... with 40 more rows