获取 5 列数据帧的 3 列中值组合的总和

4 loops r dataframe

我有一个数据框:

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

Sot*_*tos 7

一种方法是使用combn数据框(即1:5seq(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)