Несколько значений столбца - PullRequest
0 голосов
/ 17 января 2019

Я хочу умножить значения каждого столбца на 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 голосов
/ 17 января 2019

Вы можете использовать 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
0 голосов
/ 17 января 2019

Вот быстрое решение с использованием функции 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)
0 голосов
/ 17 января 2019

Это то, что вы ищете:

df %>%
  summarise_all(prod)
0 голосов
/ 17 января 2019

с базой R

apply(df, 2, prod)

С dplyr

library(dplyr)
df %>%
  summarise_all(prod)
0 голосов
/ 17 января 2019

С 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...