Эффективный способ мутировать в ряд

Joseph Noirre спросил: 14 ноября 2017 в 06:18 в: r

У меня есть два кадра данных: dfUsers и purchases, сгенерированные с использованием приведенного ниже кода:

set.seed(1)
library(data.table)dfUsers <- data.table(user = letters[1:5],
                      startDate = sample(seq.Date(from = as.Date('2016-01-01'), to = Sys.Date(), by = '1 day'), 3)
                      )dfUsers$endDate <- dfUsers$startDate + sample(30:90,1)purchases <- data.table(
  user = sample(letters[1:5], 500, replace = TRUE),
  purchaseDate = sample(seq.Date(from = as.Date('2016-01-01'), to = Sys.Date(), by = '1 day'), 500, replace = TRUE),
  amount = runif(50,300, 500)
)

Для каждого пользователя, которого я хочу добавить вместе все покупки за период между startDate и endDate.

Мой текущий подход - использовать dplyr mutate над функцией, но это ужасно медленно, поскольку обе таблицы растут.

I ' я изучаю R, поэтому мне интересно, есть ли более эффективный способ решения проблемы такого рода?

Функция:

addPurchases <- function(u, startDate, endDate) {
  purchases[user == u & startDate <= purchaseDate & endDate >= purchaseDate, sum(amount)]
}

dplyr цепочка

library(dplyr)
dfUsers %>% 
  rowwise() %>%
  mutate(totalPurchase = addPurchases(user, startDate, endDate))

0 ответов