我有一个 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/