从数据框中选择最佳值的组合R
我有一个20行10列的数据框。数据中的每个值都是介于0和10之间的数字。从数据框中选择最佳值的组合R
我想选择总和最高的值的组合,并且必须从每列中选取一个且唯一一个值。
有没有现成的r函数来做到这一点,或者是一个已知算法的含义。
是否有一个r函数可以生成所有可能的组合,我将从中选择总和最高的组合?
这是你想要做的吗? (我假设你的数据帧被命名为df
。)
maxList <- c(which(df$col1 == max(df[, 1]))) #Initialize list of row numbers with max value
total <- max(df[, 1]) #Initialize sum of allowable maximum values
combination <- c(total) #Initialize list of those maximum values
for(i in 2:ncol(df)) { #For the remaining columns in df
subCol <- df[, i]
for(j in 1:length(maxList)) { #For the number of items in maxList
subCol[maxList[j]] <- 0 #Set row values of previous maxima to zero
maxList <- c(maxList, which(subCol == max(subCol))) #Update maxList
}
combination <- c(combination, max(subCol))
total <- total + max(subCol) #Update total
}
。 理论上,解决方案不一定需要包含某些列的最大值。 –
把它看成是一个有200个节点的图,他们每个人都有一定的权重和有限的连接到其他节点,你需要找到你通过节点的路径,他们的权重总和是最大的 –
@Eyal好的,我没有考虑到这一点。我想知道,如果你为3.6M的列顺序排列中的每一个执行此代码一次,然后确定了产生最大总和的结果(如果这样可以提供解决方案,尽管是不合适的)。 (不幸的是,我不知道如何在数学上证明这一点。) – Robert
难道你不会只是取每列的最大值,然后拿出总和?即类似'sum(sapply(mydataframe,max))'。或者,这个简单的问题代表了一个更复杂的问题,它不能被分解为独立的子问题? –
当你说价值观的组合时,你究竟是什么意思? – Carl
此外,你绝对不想生成10组20个值的每个组合。这将是20^10个组合,即1024000000000个组合。 –