行绑定多个数据集的结果来自一个向量

时间:2018-03-12 13:02:44

标签: r dplyr

在模拟工作中,我有多个具有相同列变量但行不同的数据集,并且这些数据集基于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包。感谢。

1 个答案:

答案 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