R语言与格式、日期格式、格式转化




R语言的基础包中提供了两种类型的时间数据,一类是Date日期数据,它不包括时间和时区信息,另一类是POSIXct/POSIXlt类型数据,其中包括了日期、时间和时区信息。一般来讲,R语言中建立时序数据是通过字符型转化而来,但由于时序数据形式多样,而且R中存贮格式也是五花八门,例如Date/ts/xts/zoo/tis/fts等等。lubridate包,timeDate包,都有用。


常见的格式:

as.numeric 转化为数值型
as.logic 转化为逻辑型
as.complex 转化为复数型
as.character 转化为字符型
as.array 转化为数组
as.data.frame 转化为数据框
d<-as.character(z) #将数值向量z<-(0:9)转化为字符向量c("0", "1", "2", ..., "9")。  
as.integer(d)         #将d转化为数值向量  
e <- numeric()     #产生一个numeric型的空向量e  
a=data.frame(a)  #变成R的数据框  
factor()               #变成因子  可以用levels()来看因子个数  

在data.frame中,是可以实现数据集重命名的,比如data.frame(x=iris,y=cars),

也可以实现横向、纵向重命名,data.frame(x=iris,y=cars,row.names=iris)


一、日期型数据——年月日

在R中自带的日期形式为:as.Date();以数值形式存储;
对于规则的格式,则不需要用format指定格式;如果输入的格式不规则,可以通过format指定的格式读入;


标准格式:
年-月-日或者年/月/日;如果不是以上二种格式,则会提供错误——错误于charTo按照Date(x) : 字符串的格式不够标准明确;
例如这样的数据格式,就常常报错。

19:15.
   显示为:2011/1/1 19:15

as.Date('23-2013-1',format='%d-%Y-%m')  
#其中这个%d%Y可以节选其中一个
#%Y%y  大写代表年份四位数,小写代表年份二位数,要注意


格式

意义

%d

月份中当的天数

%m

月份,以数字形式表示

%b

月份,缩写

%B

月份,完整的月份名,指英文

%y

年份,以二位数字表示

%Y

年份,以四位数字表示


#其它日期相关函数
weekdays()取日期对象所处的周几;
months()取日期对象的月份;
quarters()取日期对象的季度;



二、POSIX类——精确到秒


POSIXct 是以1970年1月1号开始的以秒进行存储,如果是负数,则是1970年以前;正数则是1970年以后。
POSIXlt 是以列表的形式存储:年、月、日、时、分、秒;


mydate = as.POSIXlt(’2005-4-19 7:01:00’)
names(mydate)


默认情况下,日期之前是以/或者-进行分隔,而时间则以:进行分隔;


输入的标准格式为:日期 时间(日期与时间中间有空隔隔开)


时间的标准格式为:时:分 或者 时:分:秒;


如果输入的格式不是标准格式,则同样需要使用strptime函数,利用format来进行指定;


三、时间基本处理



Sys.Date()                 #字符串类型


typeof(Sys.Date())   #系统日期类型


gtd <- as.Date("2011-07-01")  
difftime(today, gtd, units="weeks")    #计算日期差,还可以是“secs”, “mins”, “hours”, “days”



四、遇见的问题

1、常常报错。错误于charTo按照Date(x) : 字符串的格式不够标准明确。这个错误经常出现,我本来的数据格式是

19:15.
后来换成“2011/1/1”这样的就不会报错了,需要数据库自动改变。


#几种错误汇总
dtV<-data.frame(as.POSIXct(a$b,format="%d.%m.%Y")) #错,读出来都是NA
as.Date(a$b, "%Y年%m月%d日")  #错,读不出来
as.POSIXct(strptime(a$b, "%Y-%m-%d"))  #读不出来

#转化成xts格式也读不出来
install.packages("xts")
library(xts)
as.xts(read.zoo("time.csv",header=T))
a <- as.xts(a, descr='my new xts object')
as.xts(read.zoo("a.csv",header=T))
#错

#转化成数值型也不对
c=as.numeric(sales[,2]) 



2、excel另存为csv时发生的错误。

一位网友说:我以前是在excel里另存为csv格式,百度上说CSV档如果以EXCEL开启,由于计算机档案数据转换的原因,会将其CRC之数值改做科学记号方式储存,而造成档案中的 CRC值发生错误。





可参考博客:

1、http://www.cnblogs.com/speeding/p/4060500.html




19:15.

你可能感兴趣的:(代码,r,日期差,日期格式,时间处理)