R语言处理时间的一些总结

R语言处理时间有基本包和时间处理的函数包
介绍时间处理的包lubridate的内容,然后介绍基本包的内容
时间处理函数
#时间处理的包lubridate
library(lubridate)

时间变换

###strptime---将字符串变为时间
###strftime---将字符串变为"POSIXlt"

时点类函数

它包括了解析、抽取、修改time instants--年月日周数,获取时间
    Sys.timezone()
    Sys.time()
    Sys.getlocale()
提取函数
      timedat <- ymd('2016-06-08')
      year(timedat)
      month(timedat)
      day(timedat)
      wday(timedat,label=T)
      wday(timedat)
##所在周数
    week(ymd(timedat))
##第几周 距离元旦多少天 一个月最大的天数  时区
    week(timedat)
    yday(timedat)
    days_in_month(timedat)
    tz(timedat)

时段类函数time spans

interval(timedat,now())
wday(ymd('2016-04-14'))
week(ymd('2016-04-14'))

时间的一些函数

        ##把周一算作是第一天,[0,6] 或者[1,7]
        ifelse(wday('2016-04-14')==1,6,wday('2016-04-14')-2)
        ifelse(wday('2016-04-14')==1,7,wday('2016-04-14')-1)
        ##定义新函数DayOfWeek
        ###函数功能-返回输入日期字符串同一周的7天的日期
    DayOfWeek <- function(dayString){
        ##对输入的检查-异常处理--输入需是日期的字符串-ymd格式
        if(! is.character(dayString)){                          
            cat("the input data should be character!\n") 
        }
        ##将星期的开始日期设置为周一
        TransDay <- ifelse(wday(dayString)==1,7,wday(dayString)-1)
        ##lastDayOfWeek <-  ymd(dayString)-TransDay+8
        ##lastDayOfWeek+days(-7:-1)
        ##获取日期所在的周数中的星期一的日期
        firstDayOfWeek <- ymd(dayString)-TransDay + 1
        ##和日期在同一周的7天的日期
        firstDayOfWeek+days(0:6)
    }
    month(ymd('2016-04-17'))
    week(ymd('2016-04-17'))         
    DayOfWeek('2016-04-17')
    week(ymd('2016-01-01')) 
    week(ymd('2016-01-01'))
    ##计算第几周的所在日期---可能含有误差--默认元旦是一年的第一周,不知道这个准确与否
        WeekFunc <- function(year,weekth){
            #if(! is.character(year)){                          
            #cat("the input data should be year!\n") 
            # }
            year <- paste(year,"01-01",sep="-")
            time <- ymd(year)+ddays( 7*weekth)
            time    
        }
        DayofWeek <- as.character(WeekFunc(2016,24))
        DayOfWeek(DayofWeek )       
        DayofWeek <- as.character(WeekFunc(2016,24))
        DayOfWeek(DayofWeek )

计算学生入学时间

    Sys.time()
    timeString  <-  substr(Sys.time(),1,10)
    TimeDat <- as.Date(timeString,format="%Y-%m-%d")
##入学的时间
    entranceString <- substr(Grade$studentID,1,12)
    entranceTime <- as.Date(entranceString ,format="%Y%m%d")
##入学时间距今天的天数
    interTime <- difftime(TimeDat , entranceTime ,units ="days" )
##将时间转换为数值
    as.numeric(interTime )

基本包的时间处理

    时间类型:
            日期时间类--时钟时间类--日历日期
            Date类
            POSIXct类
            POSIXlt类
    时间转换
            as.Date   as.POSIXct, as.POSIXlt
            字符转换为Date对象--需要提供参考的format  as.Date()
            日期为字符串 as.character()   或者format
            ISOdate()
            as.POSIXlt()    year   mon  mday  wday  yday  hour   min sec
    操作:
            创建日期序列
                seq(from=  , to= , by=)
##其他包
    在考虑使用哪个类的时候,选择支持你的应用的最不复杂的类。
    对于包的选择,则选择适用工作精度要求的。   
    除了lubridate包还有timeDate包--对日期功能要求比较严苛的话,可以考虑使用这个包

参考

R语言经典实例

blogroll

social