2015-11-04 71 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