美文网首页
R中日期处理

R中日期处理

作者: 一刀YiDao | 来源:发表于2016-08-29 14:56 被阅读1172次

    1、在R中日期实际是double类型,是从1970年1月1日以来的天数

    > as.Date(0)
    [1] "1970-01-01"
    > typeof(Sys.Date())
    [1] "double"
    
    # 输出星期
    > weekdays(as.Date(1))
    [1] "星期五"
    > weekdays(as.Date(2:3))
    [1] "星期六" "星期日"
    
    # 输出月份
    > months(as.Date(1))
    [1] "一月"
    
    # 输出季度
    > quarters(as.Date(1))
    [1] "Q1"
    
    # 日期转化为数值
    > as.numeric(as.Date("2013-01-01"))
    [1] 15706
    
    # 创建一个日期序列
    > dates <- seq(as.Date("2013-01-01"),as.Date("2013-01-8"), by = "1 day")
    > dates
    [1] "2013-01-01" "2013-01-02" "2013-01-03" "2013-01-04" "2013-01-05"
    [6] "2013-01-06" "2013-01-07" "2013-01-08"
    
    
    > weekdays(dates[4:7])
    [1] "星期五" "星期六" "星期日" "星期一"
    
    
    > business_days2 <- dates[!(weekdays(dates) %in% c('星期日','星期六'))]
    > weekdays(business_days2[4:7])
    [1] "星期五" "星期一" "星期二" NA  
    
    

    2、输出当前日期或者时间

    #输出当前日期,当前日期为Double型
    > today <- Sys.Date()
    > today
    [1] "2016-08-29"
    
    #格式化日期为字符串 
    > format(today,"%Y年%m月%d日")
    [1] "2016年08月29日"
    
    #注意:这种方法返回的是字符串类型
    > date()
    [1] "Mon Aug 29 14:00:56 2016"
    
    #取系统的时间
    > Sys.timeDate()
    GMT
    [1] [2016-08-29 06:47:32]
    #一个月的第一天
    > timeFirstDayInMonth(Sys.timeDate())
    GMT
    [1] [2016-08-01]
    #一个月的最后一天
    > timeLastDayInMonth(Sys.timeDate())
    GMT
    [1] [2016-08-31]
    
    #一周当中第几天
    > dayOfWeek(Sys.timeDate())
    2016-08-29 06:48:57 
                  "Mon" 
    #一年当中的第几天
    > dayOfYear(Sys.timeDate())
    2016-08-29 06:49:21 
                    242 
    

    3、字符转化为日期格式

    #as.Date()可以将一个字符串转换为日期值,默认格式是yyyy-mm-dd。
    > as.Date("2016-08-29")
    [1] "2016-08-29"
    
    # 显示为字符串,但实际是用double存储的
    > as.double(as.Date("1970-01-01"))  
    [1] 0
    #结果为0,是从1970年1月1日以来的天数。
    #可以把定制的日期字符串转换为日期型
    > as.Date("2007年2月1日","%Y年%m月%d日")
    [1] "2007-02-01"
    
    格式 意义
    %Y 年份,以四位数字表示,2007
    %m 月份,以数字形式表示,从01到12
    %d 月份中当的天数,从01到31
    %b 月份,缩写,Feb
    %b 月份,完整的月份名,指英文,February
    %y 年份,以二位数字表示,07

    4、生成案例数据

    > Dates <- c("2009-09-28","2010-01-15")
    > Times <- c( "23:12:55", "10:34:02")
    > charvec <- timeDate(paste(Dates, Times))
    > timeDate(charvec)
    GMT
    [1] [2009-09-28 23:12:55] [2010-01-15 10:34:02]
    
    # 如果你遇到案例时间数据样本1
    > DT <- c("2014/4/11 8:00:00","2014/4/11 8:30:00")
    > class(DT)
    [1] "character"
    > library(timeDate)
    > DT.new <- timeDate (DT,  format="%Y/%m/%d %H:%M:%S")
    > class(DT.new)
    [1] "timeDate"
    attr(,"package")
    [1] "timeDate"
    > DT.new
    GMT
    [1] [2014-04-11 08:00:00] [2014-04-11 08:30:00]
    
    
    # 如果你遇到案例时间数据样本2
    > DT <- c("2014-4-11 8:00:00","2014/4/11 8:30:00") 
    > class(DT)
    [1] "character"
    > DT.new <-timeDate(DT,  format="%Y-%m-%d %H:%M:%S")
    > class(DT.new)
    [1] "timeDate"
    attr(,"package")
    [1] "timeDate"
    > DT.new
    GMT
    [1] [2014-04-11 08:00:00] [NA] 
    
    #自己写
    DT2 <- seq(strptime('2014/4/11 0:00:00',"%Y/%m/%d %H:%M:%S"), by = "30 mins", length.out = 48)
    
    # 2014/4/11 0:00:00 是数据开始的时间,by = "30 mins"表示数据的频率,length.out = 48表示数据的长度
    
    

    相关文章

      网友评论

          本文标题:R中日期处理

          本文链接:https://www.haomeiwen.com/subject/bjwxettx.html