有没有办法根据 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])
总体背景:我的目标是使用组变量的排列,然后预测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])