summarise->mean()"花费的时间比预期的要长-6ren"> summarise->mean()"花费的时间比预期的要长-我有一个包含大约 420 万个观察值的数据集。我的代码如下: new_dataframe = original_dataframe %>% group_by(user_id, date) %>%-6ren">
gpt4 book ai didi

r - "group_by->summarise->mean()"花费的时间比预期的要长

转载 作者:行者123 更新时间:2023-12-04 03:22:17 26 4
gpt4 key购买 nike

我有一个包含大约 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com