【发布时间】:2019-03-13 13:22:12
【问题描述】:
我正在处理大型(最少 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
【问题讨论】:
标签: r dataframe data.table tidyverse