【发布时间】:2021-04-15 08:09:46
【问题描述】:
我注意到这个操作对于看似简单的计算来说非常耗时。它可能解释了完成当前 R 脚本的所有持续时间中超过 60% 的时间。
实际数据包含大约500,000 rows 和大约100,000 unique ids(分组依据列)。
用于计算lag difference 的列类型为lubridate::dmy_hms。因此,滞后差异是看seconds 时差。
我认为这些可能是为什么计算需要这么长时间的原因,但我也很好奇我是否可以以不同的方式重写以下代码,或者如果它更快的话,也许只使用R base(可能以牺牲做为代价)一些数据类型体操,以确保其他 dplyr-like 操作保持不变)
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)))
【问题讨论】:
-
你试过
data.table吗?setDT(dief)[, time_difference := time - shift(time), id] -
@RonakShah 我不精通 data.table 但我愿意接受该解决方案
-
@RonakShah 我刚刚发现了这个
dtplyr包,也许可以在利用data.table速度的同时保持相同的dplyr可读语法? -
time_diff =
diff(time)? -
@Eyayaw 我认为 diff(time) 与 lag(time) 不同。
标签: r dplyr data-transform