日期在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)
网友评论