умножить столбцы в dataframe условно в R - PullRequest
0 голосов
/ 03 марта 2020

У меня есть датафрейм (df), как показано ниже:

structure(list(m1 = c(1, 2, 3), m2 = c(2, 3, 4), m3 = c(3, 5, 
5)), class = "data.frame", row.names = c("R1", "R2", "R3"))

Я хочу получить вывод, как показано ниже:

structure(list(m1 = c(0, 3, 3), m2 = c(15, 10, 5), m3 = c(40, 
15, 5)), class = "data.frame", row.names = c("R1", "R2", "R3"
))

Объяснение вывода (имя фрейма данных отсутствует):

out[1,1] = df[1,1]*df[1,2]*df[1,3] - df[1,2]*df[1,3]
out[1,2] = df[1,2]*df[1,3] - df[1,3]
out[1,3] = df[1,3]

Поскольку я работаю с огромным набором данных, есть ли возможность использовать data.table для этой операции?

1 Ответ

0 голосов
/ 03 марта 2020

Вы можете сделать:

a <- structure(list(m1 = c(1, 2, 3), m2 = c(2, 3, 4), 
               m3 = c(3, 5, 5)), class = "data.frame", row.names = c("R1", "R2", "R3"))

b <- structure(list(m1 = c(0, 3, 3), m2 = c(15, 10, 5), 
               m3 = c(40, 15, 5)), class = "data.frame", row.names = c("R1", "R2", "R3"))

myfun <- function(x) {
  rev(diff(c(0, cumprod(rev(x)) )))
}

apply(a, 1, myfun)
b ### test for the correct result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...