1.R时间类型
date:日期型(只有日期,没有时分秒)
POSIXct:日期时间型(常用于数据框中
POSIXlt:将日期时间保存为一个列表
as.Date():生成日期型
注1:对yyyy-mm-dd或yyyy/mm/dd格式可直接变为date类型
注2:对非标准的格式,可加format=" "参数,%Y、%m、%d等与数据本身的格式相对应,从而生成标准的date类型
as.POSIXct():将年月日格式的日期转换为标准日期,也可以用format对应数据格式
注1:如果日期仅有年月,必须添加日才能读入(可以利用paste函数
注2:可以用tz=参数指定时区
as.POSIXlt():将R日期时间变为POSIXlt类型,之后就可以用列表方法进行处理
取出列表中数值:y<-POSIXlt(POSIXct(" "))
1900+y$year, 1+y$mon, y$mday, y$hour, y$min, y$sec
注1:取出对应数值时,year要加1900,mon要加1
注2:列表元素wday取值0表示星期天,1-6为星期一到星期六
日期计算:
(1)所有的比较运算均可用于日期类型
(2)可以给日期加减一定的秒数
(3)两个日期不能相加
(4)difftime(time1, time2, units='days'):计算相减的天数
注1:units参数可换,记得加s
注2:使用时要用c()包裹该函数,否则会有单位,即c(difftime(time1, time2, units=' '))
2.R扩展包lubridate
library(lubridate) #载入扩展包,之后的函数均在此包之中
today():返回当前日期
now():返回当前日期和时间
ymd()、mdy()、dmy():将字符型向量转换为日期型"year-month-day"
注:用哪个函数由字符型向量的格式决定,结果均转换成如上述格式的日期型向量
注:在上述三个函数之后添加_hms、_hm、_h等后缀,可以对应转换带有时分秒的字符型向量
make_date(year, month, day):用三个数字构成日期向量
make_datetime(year, month, day, hour, min, sec):六个数字组成日期时间
as.date():将日期时间型转换为日期型
as.datetime():将日期型转换为日期时间型
取出日期型或日期时间型数据x中的部分:(还可以进行赋值修改)
year(x)、month(x)、mday(x):取出年月日
yday(x)、wday(x):取出日期在一年/一周(星期天为1)中的序号
hour(x)、minute(x)、second(x):取出时分秒
update(x, year=…,month=…,…):可以对日期或日期型向量统一修改组成部分的值
注:参数包括year,month,mday,hour,minute,second
日期舍入计算:
floor_date()、ceiling_date()、round_date():将日期以时间单位向前/后/最近进行舍入
舍入参数:unit=" " 指定舍入的时间单位,如seconds,10 seconds,minutes,5 minutes,hours,days,weeks等等
注:若单位是星期,用参数week_start=7指定以星期天开始,week_start=1指定以星期一开始
日期型数据转换为字符型数据
x <- as.POSIXct(c("xxxx-xx-xx","xxxx-xx-xx"))
as.character(x,format=' ')
注:format指定显示格式——%Y,%m,%d,%H(24h制),%M,%S
注:想使用三英文字母月份缩写用%b,但需要先使用Sys.setlocale()函数设置语言环境为C
old.lctime <- Sys.getlocale('LC_TIME')
Sys.setlocale('LC_TIME','C')
三种时间类型:
(1)时间长度(duration):按整秒进行计算,以秒作为单位
POSIXct型的时间之间可以相加减,得到时间长度
时间长度可以相加,也可以乘常数,也可以给日期型数据加减时间长度,日期时间平移(以秒加)
生成时间长度类型数据:dxxxs():dyears()、dweeks()、ddays()、dhours()、dminutes()、dseconds
注:不要忘记加s,生成的数据都是xx秒
注2:可以用unclass()将生成的时间长度转换为普通数值
(2)时间周期(period):以各自的正常周期作为单位,不需要联系秒数
生成时间长度:xxxs():years()、weeks()、days()、hours()、minutes()、seconds()
注1:生成的数据就是对应周期的数据,可以相加或乘常数
注2:月度周期与已有函数名冲突,故使用period(num,units="month")生成
辨析:duration是按照秒数平移对应时间日期(不考虑闰年等情形),period是按照正常日历来平移的
(3)时间区间
生成时间区间的三种方法:
运算符%--%:d1%--%d2(d1、d2是两个日期时间型数据)
interval(start, end):start、end是两个日期时间型数据
as.interval(a, start=b):a是一个时间长度数据(用dxxxs()生成),b是开始日期
访问时间区间的端点:int_start()、int_end()
时间类型转换:
as.duration():将时间区间转换为时间长度
as.period(din,unit=" "):将时间区间转换为指定时间周期的个数,其中din是时间区间,unit参数中可以是week、month、minute等等各种周期
int_shift(din,by=dxxxs(a)):平移时间区间,其中din是时间区间,by中是平移长度
int_overlaps(din1,din2):判断两个时间区间是否有交集
***计算周岁函数
***求交集的函数