美文网首页
62.关于日期和时间之创建

62.关于日期和时间之创建

作者: 心惊梦醒 | 来源:发表于2021-09-19 10:17 被阅读0次

    【上一篇:61.关于调整因子的属性levels的值】
    【下一篇:63.关于date-time组件的获得与更改】

        在R中创建日期和时间实际上是生成固定日期和时间格式的字符串。R中固定日期和时间格式为:年-月-日 时:分:秒 时区,下文统一称为"R时间"。
        我们可以从字符串(人的习惯造成的差异)创建R时间,也可以从组成部件创建R时间,还可以做date和date-time的转换。
        日期和时间分:date、time和date-time。


    从字符串创建日期

        前面学习过用readr包中的parse_*系列函数处理,本篇讲用
    lubridate包中的函数解决问题。lubridate不是tidyverse的核心包,所以你只需要用到它的时候library一下就可以了。hms包(记忆:hour minute second)用于处理时间。

    # 获得今天的日期
    > today()
    # 获得当前的时间
    > now()
    
    这两个函数都只有一个时区参数:tzone
    

        lubridate包中的一系列Parse dates with year, month, and day components函数的名字是y、m、d三个字母的自由排列组合,所以共有6种三字母函数:ymd()、ydm()、myd()、mdy()、dym()、dmy()。另外还有两字母函数:yq()(年和季度)、ym()、my()。
        这些函数将存储在字符或数字向量种的日期时间信息转换成R时间。这些函数可以识别任意的非数字分隔符以及无分隔符。只要格式的顺序正确,这些函数就能正确地解析日期,即使输入向量包含不同格式的日期。这些函数的Usage都一样:

    ymd(
      ...,
      quiet = FALSE,
      tz = NULL,
      locale = Sys.getlocale("LC_TIME"),
      truncated = 0
    )
    
    > ymd("2017-01-31")
    [1] "2017-01-31"
    > mdy("January 31st, 2017")
    [1] "2017-01-31"
    > dmy("31-Jan-2017")
    [1] "2017-01-31"
    # 没有分割符的情况
    > dmy(010210)
    [1] "2010-02-01"
    # 2014年的第2个季度
    > yq('2014.2')
    [1] "2014-04-01"
    

    从字符串创建日期+时间

        Parse date-times with year, month, and day, hour, minute, and second components的函数也是一个家族。函数名字的格式是在上述函数的后面加下划线和h、m、s组合的字母(包括hms、hm和h)。此家族的函数处理非字母数字分割的字符或数字向量。

    # Usage
    ymd_hms(
      ...,
      quiet = FALSE,
      tz = "UTC",
      locale = Sys.getlocale("LC_TIME"),
      truncated = 0
    )
    
    > ymd_hms("2017-01-31 20:11:59")
    [1] "2017-01-31 20:11:59 UTC"
    > mdy_hm("01/31/2017 08:01")
    [1] "2017-01-31 08:01:00 UTC"
    

    从component创建日期+时间

        有两个函数:make_datetime()和make_date(),Usage为:

    make_datetime(
      year = 1970L,
      month = 1L,
      day = 1L,
      hour = 0L,
      min = 0L,
      sec = 0,
      tz = "UTC"
    )
    
    make_date(year = 1970L, month = 1L, day = 1L)
    # 用法示例
    > make_datetime(year = 1999, month = 12, day = 22, sec = 10)
    [1] "1999-12-22 00:00:10 UTC"
    > make_datetime(year = 1999, month = 12, day = 22, sec = c(10, 11))
    [1] "1999-12-22 00:00:10 UTC" "1999-12-22 00:00:11 UTC"
    

    日期时间和日期之间的转换

        有两个函数:as_datetime()和as_date()。这两个函数的输入是一个POSIXt向量。
        R中有两个基本date/times class:POSIXt和POSIXct,前者是一个指定的表示向量的列表,后者代表从1970年开始的秒数。
        这两个函数的输入除了字符串想来之外,还可以是用day或second表示的offset:

    # 如果offset是秒,则用as_datetime
    > as_datetime(60 * 60 * 10)
    [1] "1970-01-01 10:00:00 UTC"
    # 如果offset是day,则用as_date
    > as_date(365 * 10 + 2)
    [1] "1980-01-01"
    

    【上一篇:61.关于调整因子的属性levels的值】
    【下一篇:63.关于date-time组件的获得与更改】

    相关文章

      网友评论

          本文标题:62.关于日期和时间之创建

          本文链接:https://www.haomeiwen.com/subject/gelegltx.html