【问题标题】:Efficiently change hour of date column to value of another dataframe column R有效地将日期列的小时更改为另一个数据框列 R 的值
【发布时间】:2020-09-22 15:14:06
【问题描述】:

目前正在清理接近 1500 万行的数据子集。最终将使用接近 1.2 亿行的完整数据集。

我的部分数据是以小时为单位的日期,分为两列。一列具有日期 (1/1/2020) 格式,另一列具有与该日期相对应的整数形式的小时。

我已经使用以下代码成功实现了我的目标:

library(tibble)
library(lubridate)

df <- tibble(date = rep(c(mdy("1/1/2020")), each = 5), hour = 1:5)

hour(df$date) <- df$hour

在我的(相当强大的)机器上运行完整的 15M 行需要 120 秒。我通常不使用这么大的数据集,这对我来说似乎很慢,但我充其量只是一个扶手椅编码器。

这是实现我的目标的合理时间范围吗?如果没有,是否有其他功能或更有效的方法来实现相同的结果?

【问题讨论】:

    标签: r performance lubridate tibble


    【解决方案1】:

    paste '小时' 放入'日期' 列并使用ymd_h 重新转换为Datetime 类可能更容易

    library(dplyr)
    library(lubridate)
    df %>%
       mutate(date = ymd_h(str_c(date, hour, sep=' ')))
    

    【讨论】:

    • 2s。快很多,谢谢。显然我可以等两分钟继续前进,但要努力学习。我熟悉 CS 基础知识,但仅此而已。有没有 ELI5 为什么变异这么快?
    • @ghw29 它不是变异。只是您在您的作业hour(df$date) &lt;- 中创建了一个新条目“时间”类中的“小时”。相反,粘贴并转换为 Datetime 效率更高
    猜你喜欢
    • 2021-11-24
    • 2023-02-22
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2020-05-23
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多