【发布时间】:2016-02-26 05:37:42
【问题描述】:
我有一些看起来像这样的数据:
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)
但我真的需要它来遍历数据框中的行。我很感激任何帮助。
【问题讨论】:
标签: r combinations