一列的多个值

时间:2019-01-17 08:35:00

标签: r dplyr

我想将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

5 个答案:

答案 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