R数据科学

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

2019-07-21  本文已影响0人  木制品_1125
日期在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)
上一篇下一篇

猜你喜欢

热点阅读