有没有办法根据 R 中的 headers 生成具有多个 non-unique headers 和置换列的 table ?

Is there a way to generate a table with multiple, non-unique headers and permute columns based on those headers in R?

总体背景:我的目标是使用变量的排列,然后预测pre-generated随机森林模型的准确性损失。

初始随机森林模型是在包含约 100,000 个特征的数据集上创建的。这 100,000 个特征可以(使用领域知识)分为约 5,000 个组,每个组的大小是可变的(意味着每个组中会有不同数量的特征)并且每个特征并不特定于给定的组(意味着某些特征将出现在多个组中)。 100,000 个特征是 100% 独特的。

我想创建一个表格格式,其中 header 是多个“行”(不是数据行,而是 header 行)。然后我想根据每个组的 header 行进行排列。意思是当我排列“Group_1”时,在任何 header 行中将“Group_1”作为 header 的所有特征都排列(无论其他非 Group1 header在场)。

这里是关于这种数据集格式的 excel mock-up:

从那里,我相信我可以基于 header 进行置换(例如置换 Group_1 中的所有列,然后预测 RF 模型,记录准确性,并重复下一组).也欢迎您对此步骤提出任何建议。

这是一个玩具数据集:

Feature_1 <- c(17,3,5,98)
Feature_2 <- c(21000,23400,26800,73)
Feature_3 <- c(77,2008,445,32)
df <- data.frame(Feature_1,Feature_2,Feature_3)
df

这是告知每个特征在哪个中的键:

Features <- c('Feature_1','Feature_2','Feature_3', 'Feature_1')
Groups   <- c('Group1', 'Group_1','Group_1', 'Group_2')
key <- data.frame(Features, Groups)
key

我确信有不止一种方法可以做到这一点,但这是我的 excel-oriented 大脑可以想出的方法。只要符合总体目标的要求,我很乐意学习其他方法。请记住,有成千上万的功能和组,因此首选可扩展的解决方案。

以下是我的做法。为了存储组,我会使用逻辑数组,其中行对应于组,列对应于数据框的列。

对于您所展示的内容,应该是:

groups <- matrix(FALSE, nrow = 91, ncol = ncol(df), 
                 dimnames = list(paste0("Group_", 1:91),
                                 colnames(df))
groups["Group_1", 1:3] <- TRUE
groups["Group_2", 3:6] <- TRUE
groups["Group_3", c(1,6,7)] <- TRUE
groups[c("Group_7", "Group_17", "Group_91"), 2] <- TRUE

然后置换“Group_1”,这样做:

newdf <- df
group <- "Group_1"
columns <- which(groups[group,])
for (i in columns)
  newdf[,i] <- sample(newdf[,i])