在数据框的各列上使用求和函数进行梳理

问题描述

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

>dput(DATA)
structure(list(e_1 = c(21.8,21.8,21.8),e_2 = c(9.8,9.8,9.8),e_3 = c(-2.2,-2.2,-2.2),e_4 = c(-14.2,-14.2,-14.2),e_5 = c(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),e_2 = c(9.8,9.8,9.8),e_3 = c(-2.2,-2.2,-2.2),e_4 = c(-14.2,-14.2,-14.2),e_5 = c(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