跨数据框的列梳理求和函数
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
我有显示前 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