美文网首页R数据科学
8.lubridate处理日期和时间(1)

8.lubridate处理日期和时间(1)

作者: 木制品_1125 | 来源:发表于2019-07-21 21:58 被阅读0次
    日期在tibble中显示为<date>
    时间在tibble中显示为<time>
    日期时间在tibble中显示为<dttm>

    一、创建日期或时间

    1.显示当前
    library(tidyverse)
    library(lubridate)
    library(nycflights13)
    today()  # 显示当前日期
    now()  # 显示当前日期时间
    
    2.通过字符串创建(使用lubridate)
    # 创建日期型数据
    ymd("2017,01,31")
    mdy("january 31, 2019")
    ymd(20190719)
    # 创建日期时间型数据
    ymd_hms("2019-07-19 19:37:21")
    mdy_hm("01,31,2019 17:02")
    ymd(20190719, tz = "UTC")  # 通过添加时区参数将一个日期强制转换成日期时间
    
    3.通过各个成分创建
    # 在某些数据中,日期和时间数据的各个成分分布在表格的不同列中,如下:
    flights %>% 
      select(year, month, day, hour, minute)
    # 可以使用make_date()创建日期,make_datetime()创建日期时间
    flights %>%
      select(year, month, day, hour, minute) %>%
      mutate(departure = make_datetime(year, month, day, hour, minute))
    
    # 使用
    make_datetime_100 <- function(year, month, day, time){
      make_datetime(year, month, day, time %/% 100, time %% 100)
    }  # 制作转换函数,根据flights中的表示方法计算
    flights_dt <- flights %>%
      filter(!is.na(dep_time), !is.na(arr_time)) %>%
      mutate(
        dep_time = make_datetime_100(year, month, day, dep_time),
        arr_time = make_datetime_100(year, month, day, arr_time),
        sched_dep_time = make_datetime_100(year, month, day, sched_dep_time),
        sched_arr_time = make_datetime_100(year, month, day, sched_arr_time)
      ) %>%
      select(origin, dest, ends_with("delay"), ends_with("time"))
    
    flights_dt %>%
      ggplot(aes(dep_time)) +
      geom_freqpoly(binwidth = 86400)  # 86400秒 = 1天
    
    flights_dt %>%
      filter(dep_time < ymd(20130102)) %>%
      ggplot(aes(dep_time)) +
      geom_freqpoly(binwidth = 600)  # 600秒 = 10分钟
    
    ## 注意:当将日期时间型数据作为数值使用时,1表示1秒,86400表示1天
    ## 注意:当将日期型数据作为数值使用时,1表示1天
    
    4.通过其他类型数据创建
    # as_datetime()和as_date()可以将数据在日期型数据和时间日期型数据之间转换
    as_datetime(today())
    as_date(now())  
    

    二、获取日期时间成分

    1.获取成分
    year()
    month()
    yday()  # 一年中的第几天
    mday()  # 一月中的第几天
    wday()  # 一周中的第几天
    hour()
    minute()
    second()
    
    datetime <- ymd_hms(now())
    year(datetime)
    month(datetime)
    month(datetime, label = T)  # 返回简写月名
    month(datetime, label = T, abbr = T)  # 返回全月名
    mday(datetime)
    yday(datetime)
    wday(datetime)  # 从周日开始算第一天
    wday(datetime, label = T)  # 返回简写全名
    wday(datetime, label = T, abbr = T)  # 返回全名
    
    flights_dt %>%
      mutate(wday = wday(dep_time, label = T)) %>%
      ggplot(aes(x = wday)) +
      geom_bar()  # 查看每周哪一天的航班数多些
    flights_dt %>%
      mutate(minute = minute(dep_time)) %>%
      group_by(minute) %>%
      summarize(avg_delay = mean(arr_delay, na.rm = T),n = n()) %>%
      ggplot(aes(minute,avg_delay)) + 
      geom_line()  # 查看一个小时内,哪些分钟延误时间较少
    flights_dt %>%
      mutate(minute = minute(sched_dep_time)) %>%
      group_by(minute) %>%
      summarize(avg_delay = mean(arr_delay, na.rm = T), n = n()) %>%
      ggplot(aes(minute, avg_delay)) + 
      geom_line()  # 查看出发时间
    
    flights_dt %>%
      mutate(minute = minute(sched_dep_time)) %>%
      group_by(minute) %>%
      summarize(avg_delay = mean(arr_delay, na.rm = T), n = n())
    
    2.舍入
    floor_date()  # 向下舍入
    round_date()  # 四舍五入
    ceiling_date()  # 向上舍入
    
    ##3.设置成分
    update(now(), year = 2020)
    update(now(), yday=1)
    

    相关文章

      网友评论

        本文标题:8.lubridate处理日期和时间(1)

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