我有一些數據,看起來像這樣:所有R可能子組合
basin <- c("Volta","Seine","Limpopo")
c1 <- c("BEN","BEL","SA")
c2 <- c("BURK","FRA","MOZ")
c3 <- c("IVC","LUX","ZIM")
c4 <- c("GHA","NA","BOTS")
c5 <- c("MALI","NA","NA")
c6 <- c("TOGO","NA","NA")
df <- data.frame(basin, c1, c2, c3, c4, c5, c6)
basin c1 c2 c3 c4 c5 c6
1 Volta BEN BUR IVC GHA MALI TOGO
2 Seine BEL FRA LUX NA NA NA
3 Limpopo SA MOZ ZIM BOTS NA NA
每個流域有k個國家。例如,在第一行中,我需要生成5個國家的所有組合,4個國家的所有組合,等等。第二行我需要生成2個國家和3個國家和2個國家的所有組合的所有組合。然後我想將這些子集添加爲數據中的新行。
我試圖用這個功能:
allSubs <- function(x, k) {
if(k > length(x)) stop('k > length(x)')
if(choose(length(x), k)==1){
list(as.vector(combn(x, k)))
} else {
cbn <- combn(x, k)
lapply(seq(ncol(cbn)), function(i) cbn[,i])
}
}
但是,我只能得到它的工作,如果我給它的數據是這樣的:
allSubs(c('BEN','BURK','IVC','GHA','MALI','TOGO'),4)
但我真的需要它遍歷通過數據框中的行。我感謝任何幫助。
謝謝你的迴應。我調整了原始文章中的數據以包含NAs(並且還顯示了我是如何創建的)。我不擅長處理R中的數據,這是我的錯誤。我需要這種格式,因爲這只是數據的一小部分,而我試圖讓代碼工作。 – Beatrix
我編輯了答案以適應修改後的數據。不知道這是你正在尋找的輸出,因爲你沒有指定預期的輸出。 – Gopala
太棒了!兩個問題:我將如何調整它以不列出一個組合?我將它改爲'sapply(seq(2:(length(l)-1))',但它沒有做到我想的那樣。另外,我怎樣才能將組合輸出返回到數據框?任何數據框,可以命令盆地的組合輸出? – Beatrix