r - R 中数据帧的随机 block

标签 r dataframe

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

我的目标是将这个数据框分成 9 个部分,每个部分有 30 行和 30 列。然后,我想随机洗牌这 9 个部分以获得新的数据框。

我不知道如何解决这个问题,因为我对 R 还很陌生。 如有任何帮助,我们将不胜感激!

最佳答案

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

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

### 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 package 于 2021 年 1 月 21 日创建(v0.3.0)

关于r - R 中数据帧的随机 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65817382/

相关文章:

将特殊字符 * 重新插入字符串中的预定义位置

r - 加速 R 中向量的 setdiff()、intersect()、union() 操作

r - 在 R Markdown 中更改书目风格

r - 将具有管道分隔数据的列转换为伪变量

scala - 在 Spark Scala 中重命名 DataFrame 的列名称

r - 基于两列的正负一致性突变新列

r - 合并存储在列表中的数据框

python - 如何删除列值在集合中的 DataFrame 行?

python - 无法消除 DataFrame 中的 'NoneType' 对象不是可迭代错误

python - 从字典创建数据框,其中值是可变长度列表