问题描述
>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