使用来自 dplyr 的样本创建一组数据帧

Create set of data frames using sample from dplyr

以下可重现的示例将给我一个 mtcars 数据集,但其中变量 mpg 的值在每个气缸组内随机混洗,使用 dplyr 的 sample() 函数。

mtcars %>% group_by(cyl) %>% 
          mutate(mpg = mpg[sample(row_number())]) %>%
          as.data.frame() 

我的问题很简单。我想创建一个包含 n 个这些随机数据帧的列表。当然,这很容易通过循环完成,但我认为不使用循环也很简单。如何做到这一点?

您可以创建一个函数来打乱数据

library(dplyr)

shuffle_data <- function(data) {
   data %>% group_by(cyl) %>%  mutate(mpg = mpg[sample(row_number())])
}

并使用 replicate 创建长度为 n 的列表。

n <- 10
my_list <- replicate(n, shuffle_data(mtcars), simplify = FALSE)