• 【R笔记】日期处理


    R语言学习笔记:日期处理

    1、取出当前日期

    Sys.Date()

    [1] "2014-10-29"

    date() #注意:这种方法返回的是字符串类型

    [1] "Wed Oct 29 20:36:07 2014"

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

    typeof(Sys.Date())

    [1] "double"

    3、转换为日期

    用as.Date()可以将一个字符串转换为日期值,默认格式是yyyy-mm-dd。

    as.Date("2007-02-01") #得到"2007-02-01",显示为字符串,但实际是用double存储的

    as.double(as.Date("1970-01-01")) #结果为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、把日期值输出为字符串

    today <- Sys.Date()

    format(today, "%Y年%m月%d日")

    [1] "2014年10月29日"

    5、计算日期差

    由于日期内部是用double存储的天数,所以是可以相减的。

    today <- Sys.Date()

    gtd <- as.Date("2011-07-01") #我是从2011年7月开始实践Get Things Done(GTD)

    today - gtd

    Time difference of 1216 days

    原来我到今天为止已经实践GTD有1216天了。

    用difftime()函数可以计算相关的秒数、分钟数、小时数、天数、周数

    difftime(today, gtd, units="weeks") #还可以是“secs”, “mins”, “hours”, “days”

    Time difference of 173.7143 weeks


    案例1:绘图日期变化

    继续用R语言解决一个我的实际问题:统计fitbit计步器中的数据并绘图

    # 读入CSV格式的fitbit统计数据

    fitbit <- read.csv("fitbit.csv")

    # 日期要转换一下

    fitbit$date <- as.Date(fitbit$date, "%Y年%m月%d日")

    # 画图,只画线

    plot(fitbit$date, fitbit$step, type="l")

    # 只统计八月的运动情况

    fitbit8 <- fitbit[months(fitbit$date)=="八月", ]
    plot(fitbit8$date, fitbit8$step, type="l")


    6、日期型数据

    在R中自带的日期形式为:as.Date();以数值形式存储;
    对于规则的格式,则不需要用format指定格式;如果输入的格式不规则,可以通过format指定的格式读入;
    标准格式:
    年-月-日或者年/月/日;如果不是以上二种格式,则会提供错误;
    as.Date('23-2013-1')
    错误于charTo按照Date(x) : 字符串的格式不够标准明确
    > as.Date('23-2013-1',format='%d-%Y-%m')
    [1] "2013-01-23"

    格式

    意义

    %d

    月份中当的天数

    %m

    月份,以数字形式表示

    %b

    月份,缩写

    %B

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

    %y

    年份,以二位数字表示

    %Y

    年份,以四位数字表示

    #其它日期相关函数
    weekdays()取日期对象所处的周几;
    months()取日期对象的月份;
    quarters()取日期对象的季度;
    #POSIX类
    The POSIXct class stores date/time values as the number of seconds since January 1, 1970, while the POSIXlt class stores them as a list with elements for second, minute, hour, day, month, and year, among others.
    POSIXct 是以1970年1月1号开始的以秒进行存储,如果是负数,则是1970年以前;正数则是1970年以后。(unix时间戳)
    POSIXlt 是以列表的形式存储:年、月、日、时、分、秒;
    mydate = as.POSIXlt(’2005-4-19 7:01:00’)
    names(mydate)
    默认情况下,日期之前是以/或者-进行分隔,而时间则以:进行分隔;
    输入的标准格式为:日期 时间(日期与时间中间有空隔隔开)
    时间的标准格式为:时:分 或者 时:分:秒;
    如果输入的格式不是标准格式,则同样需要使用strptime函数,利用format来进行指定;

    #生成案例数据
    Dates <- c("2009-09-28","2010-01-15")
    Times <- c( "23:12:55", "10:34:02")
    charvec <- timeDate(paste(Dates, Times))
    timeDate(charvec)
    #取系统的时间
    Sys.timeDate()
    #一个月的第一天
    timeFirstDayInMonth()
    #一个月的最后一天
    timeLastDayInMonth()
    #一周当中第几天
    dayOfWeek()
    #一年当中的第几天
    dayOfYear()

    7、unix时间戳转换成普通时间的方法

    > dts = c(1127056501,1104295502,1129233601,1113547501,
    +         1119826801,1132519502,1125298801,1113289201)
    > mydates = dts
    > class(mydates) = c('POSIXt','POSIXct')
    > mydates
    [1] "2005-09-18 08:15:01 PDT" "2004-12-28 20:45:02 PST"
    [3] "2005-10-13 13:00:01 PDT" "2005-04-14 23:45:01 PDT"
    [5] "2005-06-26 16:00:01 PDT" "2005-11-20 12:45:02 PST"
    [7] "2005-08-29 00:00:01 PDT" "2005-04-12 00:00:01 PDT"

    Sys.Date( ) returns today's date. 
    date() returns the current date and time.
    # print today's date
    today <-Sys.Date()
    format(today, format="%B %d %Y")
    "June 20 2007"
    
    # convert date info in format 'mm/dd/yyyy'
    strDates <- c("01/05/1965", "08/16/1975")
    dates <- as.Date(strDates, "%m/%d/%Y") 
    
    # convert dates to character data
    strDates <- as.character(dates)
    
    --------------------------------------
    > as.Date('1915-6-16')
    [1] "1915-06-16"
    > as.Date('1990/02/17')
    [1] "1990-02-17"
    
    > as.Date('1/15/2001',format='%m/%d/%Y')
    [1] "2001-01-15"
    > as.Date('April 26, 2001',format='%B %d, %Y')
    [1] "2001-04-26"
    > as.Date('22JUN01',format='%d%b%y')   # %y is system-specific; use with caution
    [1] "2001-06-22"
    
    > bdays = c(tukey=as.Date('1915-06-16'),fisher=as.Date('1890-02-17'),
    +           cramer=as.Date('1893-09-25'), kendall=as.Date('1907-09-06'))
    > weekdays(bdays)
          tukey      fisher      cramer     kendall
    "Wednesday"    "Monday"    "Monday"    "Friday"
    
    > dtimes = c("2002-06-09 12:45:40","2003-01-29 09:30:40",
    +            "2002-09-04 16:45:40","2002-11-13 20:00:40",
    +            "2002-07-07 17:30:40")
    > dtparts = t(as.data.frame(strsplit(dtimes,' ')))
    > row.names(dtparts) = NULL
    > thetimes = chron(dates=dtparts[,1],times=dtparts[,2],
    +                  format=c('y-m-d','h:m:s'))
    > thetimes
    [1] (02-06-09 12:45:40) (03-01-29 09:30:40) (02-09-04 16:45:40)
    [4] (02-11-13 20:00:40) (02-07-07 17:30:40)
    
    > dts = c("2005-10-21 18:47:22","2005-12-24 16:39:58",
    +         "2005-10-28 07:30:05 PDT")
    > as.POSIXlt(dts)
    [1] "2005-10-21 18:47:22" "2005-12-24 16:39:58" 
    [3] "2005-10-28 07:30:05"
    
    #unix时间戳转换成普通时间的方法:
    > dts = c(1127056501,1104295502,1129233601,1113547501,
    + 1119826801,1132519502,1125298801,1113289201)
    > mydates = dts
    > class(mydates) = c('POSIXt','POSIXct')
    > mydates
    [1] "2005-09-18 08:15:01 PDT" "2004-12-28 20:45:02 PST"
    [3] "2005-10-13 13:00:01 PDT" "2005-04-14 23:45:01 PDT"
    [5] "2005-06-26 16:00:01 PDT" "2005-11-20 12:45:02 PST"
    [7] "2005-08-29 00:00:01 PDT" "2005-04-12 00:00:01 PDT"> mydate = strptime('16/Oct/2005:07:51:00',format='%d/%b/%Y:%H:%M:%S')
    [1] "2005-10-16 07:51:00"> ISOdate(2005,10,21,18,47,22,tz="PDT")
    [1] "2005-10-21 18:47:22 PDT"> thedate = ISOdate(2005,10,21,18,47,22,tz="PDT")
    > format(thedate,'%A, %B %d, %Y %H:%M:%S')
    [1] "Friday, October 21, 2005 18:47:22"> mydate = as.POSIXlt('2005-4-19 7:01:00')
    > names(mydate)
    [1] "sec" "min" "hour" "mday" "mon" "year"
    [7] "wday" "yday" "isdst"
    > mydate$mday
    [1] 19
    参考资料:




  • 相关阅读:
    《社会动物》笔记
    对长城汽车品牌多样化的一点思考
    LightGBM简单例子
    mysql拆分字符串为多行(逗号等分割)
    vue中$refs、$emit、$on的使用场景
    js中的call()和apply()和bind()方法
    Vue.js中this.$nextTick()的使用
    Vue中ref和$refs的介绍及使用
    ES6(异步操作和Async函数&await)
    vue项目在git commit时,使用eslint检测
  • 原文地址:https://www.cnblogs.com/xuancaoyy/p/5535898.html
Copyright © 2020-2023  润新知