我有一个包含大约 420 万个观察值的数据集。我的代码如下:
new_dataframe = original_dataframe %>%
group_by(user_id, date) %>%
summarise(delay = mean(delay, na.rm=TRUE)
)
这条管道应该采用一个 420 万 x 3 的数据框,其中包含 3 列:user_id、日期、延迟;并输出小于 420 万 x 3 的数据帧。
关于我为什么这样做的一点点,问题涉及用户在给定的到期日付款。有时,用户会在同一到期日以不同的延迟时间进行多次付款(例如,在到期日支付了部分款项,但在几天后完成了其余部分)。我希望有一个与每个唯一用户和截止日期组合相关联的延迟度量(平均延迟)。
对于大多数到期日,用户只支付一次,因此 mean 函数基本上应该只是将一个数字从原始数据帧复制到新数据帧。在所有其他情况下,最多有 3 个不同的延迟值与给定的截止日期相关联。
我的理解是这个时间复杂度应该在O(2n)左右,但是这个已经在强大的虚拟机上运行了超过24小时。谁能帮助我了解我在这里缺少的东西?我开始怀疑这个管道是否是 O(n^2),通过同时而不是按顺序对用户 ID 和日期进行排序
最佳答案
这是由于这个问题:https://github.com/tidyverse/dplyr/issues/5113
性能不佳是因为 delay
是一个 difftime
(正如 OP 在上面的评论中确认的那样)和 difftime
不(还)被本地 C 代码支持。作为解决方法,在调用 summarize
之前将 difftime
转换为 numeric
。
注意:dplyr github 存储库中的上述问题被标记为已关闭只是因为它现在正在此处的 vctrs 存储库中进行跟踪:https://github.com/r-lib/vctrs/issues/1293
关于r - "group_by->summarise->mean()"花费的时间比预期的要长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68293566/