跨数据框的列梳理求和函数

comb with sum function across the columns of a dataframe

我有显示前 5 行的数据框数据:

>dput(DATA)
structure(list(e_1 = c(21.8, 21.8, 21.8, 21.8, 21.8), 
e_2 = c(9.8, 9.8, 9.8, 9.8, 9.8), e_3 = c(-2.2, -2.2, -2.2, 
-2.2, -2.2), e_4 = c(-14.2, -14.2, -14.2, -14.2, -14.2), 
e_5 = c(0, 0, 0, 0, 0)), row.names = c(NA, 5L), class = "data.frame")

我想使用 combn 获取数据框的三列跨列的所有组合的总和。我使用以下内容:

library(utils)
combn(DATA,3,sum)

结果遍及所有行,我得到:

 [1] 147  87 158  27  98  38 -33  38 -22 -82

所需的输出与数据帧 DATA 的行数相同。对于每一行,给出 DATA 中 5 列中的 3 列所有可能组合的值的总和。如:

[1]  29.4  17.4  31.6   5.4  19.6   7.6  -6.6   7.6  -4.4 -16.4
[11]  29.4  17.4  31.6   5.4  19.6   7.6  -6.6   7.6  -4.4 -16.4
[21]  29.4  17.4  31.6   5.4  19.6   7.6  -6.6   7.6  -4.4 -16.4
[31]  29.4  17.4  31.6   5.4  19.6   7.6  -6.6   7.6  -4.4 -16.4
[41]  29.4  17.4  31.6   5.4  19.6   7.6  -6.6   7.6  -4.4 -16.4

要应用 df 的行,您可以使用 apply:

d <- structure(list(e_1 = c(21.8, 21.8, 21.8, 21.8, 21.8), 
               e_2 = c(9.8, 9.8, 9.8, 9.8, 9.8), e_3 = c(-2.2, -2.2, -2.2, 
                                                         -2.2, -2.2), e_4 = c(-14.2, -14.2, -14.2, -14.2, -14.2), 
               e_5 = c(0, 0, 0, 0, 0)), row.names = c(NA, 5L), class = "data.frame")

t(apply(d, 1, combn, 3, sum))
#>   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> 1 29.4 17.4 31.6  5.4 19.6  7.6 -6.6  7.6 -4.4 -16.4
#> 2 29.4 17.4 31.6  5.4 19.6  7.6 -6.6  7.6 -4.4 -16.4
#> 3 29.4 17.4 31.6  5.4 19.6  7.6 -6.6  7.6 -4.4 -16.4
#> 4 29.4 17.4 31.6  5.4 19.6  7.6 -6.6  7.6 -4.4 -16.4
#> 5 29.4 17.4 31.6  5.4 19.6  7.6 -6.6  7.6 -4.4 -16.4