Я работаю с большими (минимум 8 мил строк) dataframes
и хочу сделать некоторые базовые вычисления на основе пары переменных группировки и rmultinom
.Поскольку мой код остается в силе, для выполнения вычисления требуется не менее ~ 1 секунды, что не составило бы проблем, но мне нужно делать это тысячи раз, поэтому я действительно хотел бы ускорить это.
Яв настоящее время использую dataframes
и tidyverse
, но я не привязан ни к одному из них.Я пытался реализовать, используя data.table
, но не мог понять это.Любые предложения о том, как я могу ускорить процесс, будут очень благодарны.
Пример (реальные данные могут быть на порядок больше или больше):
library(tidyverse)
library(microbenchmark)
# create dummy data
df <- data.frame(fact = rep(letters, each = 312000),
month = rep(month.name, 26),
num = rep(sample(10000:100000, 12), 26),
prob = runif(312))
# Order by month
df <- df[order(df$month), ]
# group by two factor variables and calculate new variable
microbenchmark({
df2 <- df %>%
group_by(fact, month) %>%
mutate(res = ifelse(prob > 0, c(rmultinom(1, num[1], prob = prob)), 0))}, times = 10)
> Unit: milliseconds
> min lq mean median uq max neval
> 816.3126 822.4083 840.7966 834.6163 855.5139 879.9345 10