我想将df
中的每一列值相乘
类似于col_1 = 0.0006751475 * 0.0014568972 * 0.0012081586 * 0.0008528179 * 0.0015990335 * 0.0008528179
,其他列相同
样本df
col_1 col_2 col_3
0.0006751475 0.0013460512 0.0006971176
0.0014568972 0.0001624545 0.0003637135
0.0012081586 0.0009051034 0.0006364987
0.0008528179 0.0008122723 0.0003334041
0.0015990335 0.0003249089 0.0006364987
0.0008528179 0.0008122723 0.0003334041
答案 0 :(得分:5)
这就是您要寻找的东西
df %>%
summarise_all(prod)
答案 1 :(得分:2)
以R为底
apply(df, 2, prod)
使用dplyr
library(dplyr)
df %>%
summarise_all(prod)
答案 2 :(得分:2)
这是在基本软件包中使用apply()
函数的快速解决方案。
# generating a sample df
df <- as.data.frame(matrix(runif(20),nrow=4))
# using apply function to calculate the product of each column
# returns a vector
# prod = product of numbers
# margin = 2 applies it on each column
prodcol <- apply(df,FUN=prod,MARGIN=2)
答案 3 :(得分:2)
您可以使用cumprod:
df <- data.frame(a = c(1, 2, 3), b = c(4, 5, 6))
这将创建此数据框:
a b
1 4
2 5
3 6
cumprod(df)
这将输出:
a b
1 4
2 20
6 120
此外,您可以采用最后一行以获得最终结果:
cumprod(df)[nrow(df), ]
然后你就得到
a b
6 120
答案 4 :(得分:1)
使用tidyverse
,您可以执行以下操作:
df %>%
mutate_all(funs(cumprod(.)))
col_1 col_2 col_3
1 6.751475e-04 1.346051e-03 6.971176e-04
2 9.836205e-07 2.186721e-07 2.535511e-07
3 1.188370e-09 1.979208e-10 1.613849e-10
4 1.013463e-12 1.607656e-13 5.380640e-14
5 1.620561e-15 5.223418e-17 3.424770e-17
6 1.382043e-18 4.242838e-20 1.141832e-20
cumprod()
正在执行累积乘法。
或者,如果您只想要最后一行:
df %>%
summarise_all(funs(last(cumprod(.))))
col_1 col_2 col_3
1 1.382043e-18 4.242838e-20 1.141832e-20