R语言的基础包中提供了两种类型的时间数据:
Date日期数据 不包括时间和地区信息POSIXct/POSIXlt类型数据 其中包括了日期 时间和时区信息
其中日期data存储的是天;时间POSIXct存储的是秒,POSIXlt 打散,年月日不同。
data:资料 数据 date:日期 日子
常见转换格式:
as.logic转化为逻辑型as.complex转化为复数型as.array转化为数组as.character转化为字符型as.data.frame转化为数据框as.numeric转化为数值型
#将数值型向量转化为字符向量c("0","1","2",...,"9")
z<-(0:9)
d<-as.character(z)
#将d转化为数值向量
as.integer(d)
#将数值型向量转化为数据框
e<-numeric()
a=as.frame(a)
#变成因子
factor()
参考文章:R语言与格式,日期格式,格式转化的操作
1.日期型数据—date
as.Date函数 日期值通常以字符串的形式输入到R中,然后通过as.date()函数转化为以数值形式存储的日期变量。日期值的默认输入格式是yyyy-mm-dd,其他类型均为不规则,使用as.Date函数的时候要指明format。对于规则的形式,不需要用format指定格式;如果输入的格式不正确,可以通过format指定的格式读入。
#规则日期的读入
mydates<-as.Date(c("1970-01-01","1970-02-01"))
#不规则日期的读入
strdates<-c("01/01/1970","02/01/1970")
dates<-as.Date(strdates,"%m/%d/%Y")
#读入1970-01-01 并将其定义为第一天 之后的月份会以距离这天来计算
> x<-as.Date("1970-01-01")
> unclass(x)
[1] 0
> unclass(as.Date("1970-02-01"))
[1] 31
unclass()可以将日期变成以天来计数,比如1970-02-01输出的31,就代表着距离1970-01-01有31天。
%d月份中当的天数%m月份 以数字形式表示%b月份 缩写%B月份 完整的月份名 指英文%y年份 以二位数字表示%Y年份 以四位数字表示
weekdays()取日期对象所处的周几
months()取日期对象的月份
quarters()取日期对象的季度
2.时间型—POSIXct与POSIXlt
POSIXlt 格式 POSIXct 是以1970年1月1号开始的以秒进行存储,如果是负数,则是1970-01-01年以前;正数则是1970年以后。 POSIXlt 是以列表的形式存储:年、月、日、时、分、秒,作用是打散时间。
#unclass()可以将时间打散
> today<-Sys.time()
> unclass(as.POSIXlt(today))
$sec
[1] 59.71381
$min
[1] 50
$hour
[1] 1
$mday
[1] 16
$mon
[1] 1
$year
[1] 123
$wday
[1] 4
$yday
[1] 46
$isdst
[1] 0
$zone
[1] "CST"
$gmtoff
[1] 28800
attr(,"tzone")
[1] "" "CST" "CDT"
POSIXct 格式 以秒储存时间,GMT/GST代表时区。
3.时间运算
基本运算函数
#系统时间
Sys.Date()
#系统日期类型
typeof(Sys.Date())
直接加减
相同的格式才能相互减,不能加。二进列的+法对"Date"、"POSIXt"对象不适用。相互减之后,一般结果输出的天数。
format函数—提取关键信息
format函数可以将时间格式,调节成指定时间样式。format(today,format=“%Y”)其中的format可以自由调节,获取你想要的时间信息。 并且format函数可以识别as.Data型以及POSIXct与POSIXlt型,将其日期进行提取与之后要讨论的split类型。
> today<-Sys.time()
> format(today,format="%B-%d-%Y")
[1] "二月-16-2023"
> today<-Sys.time()
> format(as.Date(today),format="%Y")
[1] "2023"
> format(as.POSIXlt(today),format="%Y")
[1] "2023"
> format(as.POSIXct(today),format="%Y")
[1] "2023"
strptime函数 该函数是将字符型时间转化为 “POSIXlt” 和"POSIXct"两类。跟format比较相似。strptime之后的时间是可以直接做减法,因为直接是"POSIXlt" 和"POSIXct"格式了。
发表评论