我有一个数据框,我想将其中的值仅在一列中混洗1000次,同时保持其余列中的值保持完整,以进行随机森林分类的随机置换测试。虽然我知道如何使用基础包中的sample
生成1个排列,但我如何一次获得1000?下面是数据外观的截图(它有大约50k行和28个变量)。
可以使用以下方法生成一些示例数据:
data=data.frame(rep(1:3, each=10), rep(2:4, each=10), rep(10:12, each=10))
names(data)<-c("aH", "bH", "cH")
虽然我无法评论您的分析的有效性,但我会为您提供解决方案。
我们使用lapply
在矢量1:100上循环以生成100个可重复的一列排列,将其与其余数据绑定在一起并将所有样本存储在列表中。
data=data.frame(rep(1:3, each=10), rep(2:4, each=10), rep(10:12, each=10))
names(data)<-c("aH", "bH", "cH")
test <- lapply(1:100, function(x){
set.seed(x)
cbind.data.frame(data[,1:2], sample(data[,3]))
})
另一种选择是combinat
包及其函数permn()
,它生成输入向量的所有可能的排列。