如何同步随机打乱data.frame的两列且保持列对应关系?
解决方案
首先,我们可以通过以下步骤实现需求:
- 每次打乱时,保持
b和d列的行对应关系,即它们的行索引同步随机重排 - 将打乱后的
b、d列与原始的a、c列组合,生成新的数据框 - 重复上述过程1000次,得到1000个数据框
代码实现
# 原始数据框 set.seed(123) # 设置随机种子保证结果可复现(可选) df <- data.frame(a=rnorm(10, 0,1), b=rnorm(10,1,2), c=rnorm(10, 2, 1), d=rnorm(10, 1,2)) # 定义打乱函数:保持b和d的对应关系 shuffle_bd <- function(df) { # 生成随机行索引 shuffled_idx <- sample(nrow(df)) # 提取打乱后的b和d,保留a和c的原始顺序 new_df <- df new_df[, c("b", "d")] <- df[shuffled_idx, c("b", "d")] return(new_df) } # 生成1000个打乱后的数据框,存储在列表中 shuffled_dfs <- replicate(1000, shuffle_bd(df), simplify = FALSE)
代码说明
set.seed(123):固定随机种子,确保每次运行代码得到的打乱结果一致,不需要可删除shuffle_bd函数:通过sample(nrow(df))生成随机行索引,用该索引重排b和d列,同时保留a和c列的原始顺序replicate(1000, ...):重复执行打乱函数1000次,simplify = FALSE确保结果是包含1000个数据框的列表
你可以通过shuffled_dfs[[1]]、shuffled_dfs[[2]]等方式访问每个打乱后的数据框。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

