在处理一些数据中,我经常遇到一些日期数据,今天就来说说对于不同格式的日期数据该怎么处理。下面是一些常用来处理的函数。
as.Date(x, ...)## S3 method for class 'character'
as.Date(x, format, ...)## S3 method for class 'numeric'
as.Date(x, origin, ...)## S3 method for class 'POSIXct'
as.Date(x, tz = "UTC", ...)
as.POSIXct(x, tz = "", ...)
as.POSIXlt(x, tz = "", ...)## S3 method for class 'character'
as.POSIXlt(x, tz = "", format, ...)## S3 method for class 'numeric'
as.POSIXlt(x, tz = "", origin, ...)
strftime(x, format = "", tz = "", usetz = FALSE, ...)
strptime(x, format, tz = "")
处理时间数据一般会用到as.Date,as.POSIXct,strptime函数,x就是日期数据,另外比较重要的参数就是format,origin,tz。format指日期格式;origin指时间起点,比如处理Unix时间戳,下面会有介绍;tz指时区,我们位于东八区,使用的是北京时间,简称CST。
format参数详解
format参数可以说是最重要的参数,它看起来比较简单,类似%y%m%d的样子,它用来指定日期格式,但除了y,m,d之前还有许多参数,下面我简单介绍一下。
现在来举几个例子来看看。
> as.Date("01-Jan-1995","%d-%B-%Y")
[1] "1995-01-01"
> as.Date("01-Jan-1995","%d-%b-%Y")
[1] "1995-01-01"
> strftime("2006-01-08 15:07:52","%H") #以24小时制提取小时
[1] "15"
> strftime("2006-01-08 15:07:52","%I") #以12小时制提取小时
[1] "03"
> strftime("2018/02/28","%x") #时/分/秒的格式输出时间
[1] "02/28/18"
> strptime("02/27/92","%m/%d/%y")
[1] "1992-02-27 CST"
> strftime("2018-2-26","%A") #输出星期几
[1] "Monday"
下面附上12个月的英文单词和简写,顺便温习一下12个月的单词怎么写,哈哈!
origin参数详解
我们来建举一个简单的例子,有些日期数据是以Unix时间戳的形式来记录的。时间戳是自1970年1月1日(00:00:00 GMT)以来的秒数。它也被称为Unix时间或Unix时间戳。在处理时间戳数据可以使用as.POSIXct()
函数。网上也有许多网站可以转。而as.POSIXlt是用列表来表示时间,时间的每一部分都是列表的一个元素。废话不多说,直接来看例子。
#878887116就是一个Unix时间戳
> as.POSIXct(878887116,origin="1970-01-01") # 处理时间戳 CST表示北京时间。
[1] "1997-11-07 15:18:36 CST"
> tc1<-as.POSIXct("2018-2-28")##求时间差,不满足加法
> tc2<-as.POSIXct("2018-2-26")
> tc1-tc2
Time difference of 2 days
> al<-as.POSIXlt("2018-2-26") ##as.POSIXlt以列表来表示时间
> unlist(al)
sec min hour mday mon year wday yday isdst zone gmtoff
"0" "0" "0" "26" "1" "118" "1" "56" "0" "CST" NA
> unclass(al)##也可以用unclass查看
$sec
[1] 0
$min
[1] 0
$hour
[1] 0
$mday
[1] 26
$mon
[1] 1
$year
[1] 118
$wday
[1] 1
$yday
[1] 56
$isdst
[1] 0
$zone
[1] "CST"
$gmtoff
[1] NA
由于那个时区简称太多,我这就不列举了,想了解的可以在www.timeanddate.com/time/zones/查看。
说到最后,如果你在做时间转换一直结果都是NA的话,试试输入Sys.setlocale("LC_TIME","C")
再转化看看结果如何。
后来在网上查阅之后,发现有专门用来做时间处理的包—lubridata和timeDate,我想用它的话对时间数据处理就会更方便,如果用这些函数处理麻烦的话再看看那两个包。
如果你有什么关于时间处理的好方法或有什么问题也欢迎在留言区分享交流。
1:基于 TensorFlow 的图像识别(R实现)
2:聚类分析简单介绍(附R对应函数介绍)
3:R常用包分类汇总 终极版
4:啤酒和尿布的故事是真的吗
5:我把我用R写的第一个爬虫就献给了国家
6:搭建一款属于你自己的图像识别系统。