【R读书笔记】R语言读书心得5-数据管理(2)-时间序列
2.4日期
其实,在R语言里,除了基本的数据结构类型外,时间序列也是我们在日常数据分析中经常遇到 的。时间序列的应用其实是非常广泛的,它不仅在股票分析方面起着决定性的作用,同时,它在气象学,尤其研究过去的气候变化来推出未来的气候变化方面是起到 非常大的作用。甚至,在考古学方面,也需要通过处理时间序列来确定某样出土的物品是处在怎样的一个历史时期。
在R语言当中,也有很多的函数是处理时间、日期方面的数据。在讲这些函数之前,我们先看看R语言的时间序列当中,都涉及到了哪些参数:
毫无疑问,我们在处理日期的时候,都还是涉及年月日以及周比较多。这份参数表中,周和月都有其缩写的版本,也有全写的版本。这里,我也不再花额外的时间把里面的内容翻译成中文。
现在,我们要输入一段含有时间字符串的向量,并且从中提取相应的时间序列,这时,我们可以用as.Date()函数来实现这样的操作。具体代码和结果如下:
d<-c("1984-07-07","1977-11-05")
as.Date(d)
当然,你也可以自行设定格式输出时间序列,下面,我来举这样的一个实例:
d1<-c("01/03/1970","03/12/1988")
dates<-as.Date(d1,"%m/%d/%Y")
dates
这里,我们原本输入的时间序列是月/日/年,而输出量的时候,系统函数返回了年/月/日的形式。当然,我们也可以自己设定相关的日期格式,相关实例如下:
myformat <- "%m/%d/%y"
leadership$date <- as.Date(leadership$date, myformat)
leadership
其实,在原来的数据框当中,其日期序列算是比较接近我们常用的表达形式了。
接下来,我讲一讲如何在R语言中得到系统时间。其实,我们刚开始 学习编程语言的时候,尤其是Java和C++都经常有所提到。在R语言当中,也有可以调用系统内置时间的函数。今天,我们要接触到的则是 Sys.Date()和date()函数。我们分别对这两个函数进行帮助文档的查阅:
我们从它们的帮助文档分别获知,Sys.Date()返回的是当前的时区和日期,而Sys.time()返回的则是当前时区的具体时间,即除了日 期,还有当天的具体时间。date()函数是返回日期的字符串形式。当然,Sys.Date()函数的用法还很多,接下来,我还有继续对这样的一个函数进 行讲解。
其实,我们还可以控制Sys.Date()函数的输出格式,以及,我们想要输出什么样的时间。不妨看看下面的这个实例:
today<-Sys.Date()
format(today,format="%b %d% %Y %a")
在这个实例中,我们先用Sys.Date()函数获取当前的时间,而今天的日期就是2016年4月28日,也就是星期四。当然,我们也可以只单独展示其中一种日期,比如,我们只通过输入一个参数来输出一个时间,具体如下:
format(today,format="%A")
从上面两个实例,我们不难看到format()这个函数对于时间序列格式输出的设定是有很大的帮助的。所以,以后如果要处理时间序列,并且想要设定输出的格式,我们都可以用format()这样的一个函数。我们不妨也查看一下format()函数的帮助文档:
大家都看到了,format的帮助文档是有这么多的内容,当然,常用到的参数还是x、width、digits等等;而帮助文档的具体内容,大家就自行理解就好了。
接下来,我们还可以运用上述的函数来计算两个时间点相差多少天。这时,我们采用as.Date()函数来获得其日期,并直接进行加减运算。
today<-as.Date("2016-04-28")
past<-as.Date("1984-07-07")
days<-today-past
days
这里,我们算出从1984年7月7日到今天,也就是2016年4月28日相差了11618天。当然,我们还可以使用difftime()函数进行上面的运算,得:
today<-as.Date("2016-04-28")
past<-as.Date("1984-07-07")
days<-today-past
这里,我们得到同样的结果。
接下来,关于difftime()函数,我还是稍微在这里介绍一下。我们还是先查阅一下difftime()函数的帮助文档:
这里,我们看到在difftime()里,我们把两个不同的时间点填到difftime()的前面,并且后面可以带一个tz时区参数,具体tz参数 可以点击time zone,然后会自动链接到time zone的帮助文档。后面,我们看一看units参数,它给出了auto、sec、mins等等一系列描述时间的参数,到时,你可以根据你的需求算什么类 型的时间差。当然,你也可以事先给units()函数赋值,然后再把它传到difftime()函数里面。其它的参数大家可以自行了解。
接下来,我们看一看difftime()的实例:
today<-Sys.Date() #今天的日期
dob <- as.Date("1977-07-28")
difftime(today, dob, units="weeks") #计算周数差
today<-Sys.Date() #今天的日期
dob <- as.Date("1979-08-23")
difftime(today, dob, units="auto") #与units=days一样
以上是关于difftime()函数的两个实例,其它的话,自己可以尝试一下计算别的东西。
最后,补充一下,如果你想把时间序列转换成字符串类型,你可以直接as.character()函数即可。比如,我们可以把现在的是转换成字符串格式:
as.character(Sys.time())
刚好,写到这的时间是北京时间2016年4月28日21:01。
严禁修改,可以转载,请注明出自数据人网和原文链接。
今日数据人网精选推荐:
《“高大上”的 Monte Carlo Simulations》
点击【阅读原文】,即刻阅读精选!
数据人网是数据人学习、交流和分享的平台http://shujuren.org,专注于从数据中学习。
数据人网官方微信公众号:数据科学自媒体
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!