渢空 发表于 2015-6-25 11:48:34

R语言数据处理--日期数据筛选

本帖最后由 渢空 于 2015-6-25 13:47 编辑

有时我们在处理时间数据时,需要对数据进行筛选,例如:需要筛选出某一年某一个月份的全部数据。这时就需要对日期进行筛选,以下介绍几种常用的日期数据筛选方法。
1、对DATE类和POSIX类的筛选
DATE类只能存储日期的年、月、日、星期、季度等信息;而POSIX类则可以存储更多的信息,如年、月、日、时、分、秒、时区、星期等。
a=as.Date(Sys.time())
b=as.POSIXct(Sys.time())
可以看出POSIX类存储的信息确实要更多。
利用format()函数可以提取日期数据中的信息。
对于DATE类:

对于POSIX类:

然后利用format(date,format)便可以提取日期中相应的信息,例如:
提取年份:
format(a,format = "%Y")显示上午还是下午:
format(b,format = "%p")显示当地时区:
format(b,format = "%z")提取出信息后,我们可以利用正则表达式对我们所要的内容进行筛选,例如:我们想筛选出2009-01-10至2009-01-20直接的交易信息。
DateApp=read.csv2(file = "R/DateApp.csv",header = T,stringsAsFactors=F,sep = ",")
DateApp$ISE=as.numeric(DateApp$ISE)
DateApp$date=as.Date(DateApp$date,format = " %d-%b-%y")首先读入数据,由于数据以字符型储存,所以先对数据类型进行转换。
转换后的数据如下:

现利用正则表达式筛选出我们所要的结果:
DateApp[(format(DateApp$date,format = "%Y")=="2009"
               &format(DateApp$date,format = "%m")=="01"
               &as.numeric(format(DateApp$date,format = "%d"))>=10
               &as.numeric(format(DateApp$date,format = "%d"))<=20),]


2、利用xts类筛选
这是基于xts包下的类,对于筛选时间数据,进行时间序列分析非常方便。
对于刚才我们读入并转换好的数据DateApp,将其转换为xts类数据。
library(xts)
DateApp=as.xts(x = DateApp$ISE,order.by = DateApp$date,dateFormat = "DATE")
转换后,DateApp已经成为一个xts类对象
此时,我们只需要提取我们想要的数据就行了,例如:我们想筛选出2009-01-10至2009-01-20直接的交易信息。
由于转换后变量名会消失,所以这里先给变量重命名,而这里日期已经不算一个变量,而是当做数据的ID,所以数据只剩下一个变量即“ISE”
colnames(DateApp)=c("ISE")
DateApp["2009-01-10/2009-01-20",]    #提取需要的数据
利用xts类提取数据比利用正则表达式筛选更为简单方便。
页: [1]
查看完整版本: R语言数据处理--日期数据筛选