首页 > 解决方案 > R中数据帧的混洗块

问题描述

我有一个 90 行和 90 列的数据框。

我的目标是将这个数据框分成 9 块,每块有 30 行和 30 列。然后,我想随机打乱这 9 个片段以获得一个新的数据帧。

我不确定如何解决这个问题,因为我在 R 中还很新。任何帮助都将不胜感激!

标签: rdataframe

解决方案


在向量列表上使用sample,然后取消列表和子集:

如果我理解正确,您正在尝试做一些类似于 3*3 滑动图片拼图的事情,对吧?您将 df 分成 30 个块,然后“洗牌”这些块。这将做到这一点:

### Create a 90 by 90 data frame
set.seed(2)
df <- as.data.frame(array(runif(90*90), dim = c(90,90)))

### Function to randomise subsetting
rand_dims <- function(){
  myDims <- list(1:30, 31:60, 61:90)
  unlist(sample(myDims))
}

### Shuffle 'chunks' of df
df[rand_dims(), rand_dims()] -> shuffled

### Checking the leading row/col names
### Shows we've succeeded 
colnames(shuffled)[1:5]
#> [1] "V61" "V62" "V63" "V64" "V65"
rownames(shuffled)[1:5]
#> [1] "31" "32" "33" "34" "35"

reprex 包(v0.3.0)于 2021-01-21 创建


推荐阅读