2015-11-04 72 views
-2

我有一个20行10列的数据框。数据中的每个值都是介于0和10之间的数字。从数据框中选择最佳值的组合R

我想选择总和最高的值的组合,并且必须从每列中选取一个且唯一一个值。

有没有现成的r函数来做到这一点,或者是一个已知算法的含义。

是否有一个r函数可以生成所有可能的组合,我将从中选择总和最高的组合?

+3

难道你不会只是取每列的最大值,然后拿出总和?即类似'sum(sapply(mydataframe,max))'。或者,这个简单的问题代表了一个更复杂的问题,它不能被分解为独立的子问题? –

+0

当你说价值观的组合时,你究竟是什么意思? – Carl

+1

此外,你绝对不想生成10组20个值的每个组合。这将是20^10个组合,即1024000000000个组合。 –

回答

0

这是你想要做的吗? (我假设你的数据帧被命名为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 
} 
+0

。 理论上,解决方案不一定需要包含某些列的最大值。 –

+0

把它看成是一个有200个节点的图,他们每个人都有一定的权重和有限的连接到其他节点,你需要找到你通过节点​​的路径,他们的权重总和是最大的 –

+0

@Eyal好的,我没有考虑到这一点。我想知道,如果你为3.6M的列顺序排列中的每一个执行此代码一次,然后确定了产生最大总和的结果(如果这样可以提供解决方案,尽管是不合适的)。 (不幸的是,我不知道如何在数学上证明这一点。) – Robert