【问题标题】:How to create date from datetime (using lubridate)?如何从日期时间创建日期(使用 lubridate)?
【发布时间】:2015-02-25 20:58:23
【问题描述】:

假设我创建了一个包含日期和时间的变量:

a <- ymd_hms("2014-01-01 12:23:34")

如何创建另一个只有日期的变量?也就是说,我应该怎么做才能将a 的值转换为与b 的值相同,其中b

b <- ymd("2014-01-01")

【问题讨论】:

    标签: r posixct lubridate


    【解决方案1】:

    你可以使用round_date

    round_date(a, "day")
    [1] "2014-01-02 UTC"
    

    编辑

    不过,您确实需要小心舍入时间。为了完全等价,您需要使用floor_date

    identical(ymd("2014-01-01"), floor_date(a, "day"))
    [1] TRUE
    

    【讨论】:

    • 他为什么需要这么复杂的东西?为什么不只是as.Date(a)lubridate 的设计可能是为了更容易处理日期,而不是让它过于复杂。
    • @DavidArenburg 例如,对我来说,坚持一组有限的概念很有帮助。我一直记得floor_date,但如果是as.Dateas.date,我必须查一下(点和大写字母是什么意思?)。而且无论它返回什么都可能与我已经在做的不兼容。在 R 中,总感觉有十几种方法可以实现一件事。坚持使用 lubridate(或更一般地说,tidyverse)的功能极大地帮助我提高工作效率。
    • @slhck 这是因为 Hadley 用可爱的名字重命名了所有 R 函数,然后 RStudio 大力推广 tidyverse,现在所有新的 R 用户都认为这是标准,其他一切都令人困惑。我觉得使用 base R 和单个包更有效率,例如data.table (有时根据我的需要其他包)而不是捆绑在一起的大量包(即tidyverse),它们都有无数不同的功能,你需要记住并且不断被重命名/弃用,速度很慢,屏蔽来自不同包、不稳定等的函数。
    【解决方案2】:

    使用date() 更短,并且避免了任何舍入问题。

    library(lubridate)
    date(a)
    [1] "2014-01-01"
    

    【讨论】:

      猜你喜欢
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多