加速或替代 group by 和 dplyr 中的滞后

Afi*_*ari 0 r dplyr data-transform

我注意到这个操作对于看似简单的计算来说非常耗时。它可能解释了完成当前 R 脚本的所有时间中超过 60% 的时间。

实际数据包含 about500,000 rows和 about 100,000 unique ids(分组依据的列)。

用于计算的列类型lag differencelubridate::dmy_hms。因此,滞后差异是指seconds时间差异。

我认为这些可能在为什么计算需要这么长时间的原因中发挥了作用,但我也很好奇我是否可以以不同的方式重写以下代码,或者R base如果它更快的话可能只是使用(也许以进行一些数据类型体操来确保其他 dplyr类似操作保持不变)

dief <- tibble(id = rep(letters,4), time = 1:length(id) + sample(1:30, length(id),replace = T))
dief %>%
  arrange(id) %>%
  group_by(id) %>% 
  mutate(time_difference = (time - lag(time)))
Run Code Online (Sandbox Code Playgroud)

Des*_*ond 5

两个选项是 dtplyr 和tidytable。我个人使用后者。两者都利用 data.table 但使用 dplyr 风格的代码。

dief <- tibble(id = rep(letters,4), time = 1:length(id) + sample(1:30, length(id),replace = T))
dief %>%
  arrange.(id) %>%
  mutate.(time_difference = (time - lags.(time)),
          .by = id)
Run Code Online (Sandbox Code Playgroud)

以下是一些速度比较