我有一个数据框:
df <- data.frame(a=c(1,2), b=c(3,4), c=c(3,5), d=c(6,5), e=c(9,2))
Run Code Online (Sandbox Code Playgroud)
我想编写一个函数,为我提供 3 个列值的所有可能组合。所需的输出将是
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 7 10 13 10 3 16 12 15 18 18
2 11 11 8 12 9 9 14 11 11 12
Run Code Online (Sandbox Code Playgroud)
我想写一个循环来遍历n列数的不同组合,在这个问题中n=3
一种方法是使用combn数据框(即1:5或seq(5))的列数序列,然后将其用作索引以对数据框进行子集化。然后rowSums()将添加值,即
combn(seq_along(df), 3, FUN = function(i) rowSums(df[i]))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 7 10 13 10 13 16 12 15 18 18
[2,] 11 11 8 12 9 9 14 11 11 12
Run Code Online (Sandbox Code Playgroud)
另一种使用方式combn(归功于@nicola):
combn(df,3,rowSums)
Run Code Online (Sandbox Code Playgroud)
如果每行都有不同的组合,那么 1 种方法是循环遍历各个行,即
sapply(seq(nrow(df)), function(i) max(combn(df[i, 1:5], df$Lanes[i], sum)))
#[1] 18 16
Run Code Online (Sandbox Code Playgroud)