99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀R語(yǔ)言時(shí)間數(shù)據(jù)處理之lubridate包
R語(yǔ)言時(shí)間數(shù)據(jù)處理之lubridate包
2017-05-08
收藏

R語(yǔ)言時(shí)間數(shù)據(jù)處理之lubridate包

在我們處理一些時(shí)間序列數(shù)據(jù)時(shí),經(jīng)常會(huì)碰到各種時(shí)間數(shù)據(jù),比如“2016-03-03”。很多時(shí)候我們需要提取出其中的年、月、日甚至是小時(shí)、分、秒,從而可以方便的進(jìn)行比較、篩選等操作。如果我們自己去實(shí)現(xiàn)上述功能,可能會(huì)寫(xiě)一個(gè)字符串的提取函數(shù),來(lái)確定相應(yīng)的時(shí)間單位值。但是,由于時(shí)間數(shù)據(jù)格式多樣,總會(huì)碰到一些問(wèn)題。還好lubridate這個(gè)包已經(jīng)幫我實(shí)現(xiàn)了各種功能,功能簡(jiǎn)單但方便快捷,下面進(jìn)行介紹:
library(lubridate)
返回時(shí)間值
首先,lubridate函數(shù)的方便之處在于無(wú)論年月日之間以什么間隔符分隔,它總能找到正確的值且返回的是數(shù)字值,比如:
> year("2016-10-24")
[1] 2016
>year("2016/10/24")
[1] 2016
> month("2016/10/24")
[1] 10>
day("2016/10/24")
[1] 24

我們可以看到,直接用year(),month(),day()函數(shù)就可以提取相應(yīng)的數(shù)值,同樣的函數(shù)還有hour(),minute(),second()等:

> hour("2011-08-10 14:20:01")
[1] 14>
minute("2011-08-10 14:20:01")
[1] 20>
second("2011-08-10 14:20:01")
[1] 1

同時(shí),lubridate還提供了函數(shù)幫助處理不同排列順序的年月日數(shù)據(jù):

> ymd("20110604")
[1] "2011-06-04"
> mdy("06-04-2011")
[1] "2011-06-04"
> dmy("04/06/2011")
[1] "2011-06-04"

ymd,mdy,dmy分別表示了三種常見(jiàn)的年月日排列方式,通過(guò)這種方式我們就可以把不同的日期數(shù)據(jù)都轉(zhuǎn)化為標(biāo)準(zhǔn)的日期數(shù)據(jù)。

時(shí)間數(shù)據(jù)運(yùn)算

此外我們還可以用對(duì)時(shí)間數(shù)據(jù)進(jìn)行加減,這也是很有用的,因?yàn)橛袝r(shí)候我們要判斷兩個(gè)時(shí)間之間的間隔是否超過(guò)了某個(gè)值:

> minutes(2) ## period
[1] "2M 0S"
> dminutes(2) ## duration
[1] "120s (~2 minutes)"

我們可以看到有兩個(gè)函數(shù):minutes(),dminutes(),minutes(2)函數(shù)表示的2個(gè)整分鐘的概念,而dminutes()則是具體120秒的概念。這兩者之間有何不同呢?可以看下面的例子:

> leap_year(2011) ## regular year
[1] FALSE
> ymd(20110101) + dyears(1)
[1] "2012-01-01"
> ymd(20110101) + years(1)
[1] "2012-01-01"
> leap_year(2012) ## leap year
[1] TRUE
> ymd(20120101) + dyears(1)
[1] "2012-12-31"
ymd(20120101) + years(1)
> [1] "2013-01-01"

leap_year()函數(shù)可以判斷是否是閏年,而通過(guò)上述返回結(jié)果我們可以知道,因?yàn)閐years(1)表示的365天,所以從2012-01-01一個(gè)dyears(1),返回值是2012-12-31,而years(1)則是一個(gè)整年的概念,無(wú)論是閏年還是非閏年,加上一個(gè)years(1)都能返回下一年的相同月日的那一天,在這個(gè)例子里就反悔了2013-01-01。

時(shí)間區(qū)間

lubridate還允許我們定義一個(gè)時(shí)間區(qū)間,例如:

> arrive<-"2011-08-10 14:00:00"
> leave<-"2011-08-10 14:00:05"
> int<-interval(arrive,leave)
[1] 2011-08-10 14:00:00 UTC--2011-08-10 14:00:05 UTC

兩個(gè)時(shí)間段是由--相連的,UTC表示時(shí)區(qū),lubridate允許我們?cè)诮o時(shí)間數(shù)據(jù)賦值的時(shí)候加上時(shí)區(qū)這一項(xiàng),由于在日常生活中使用可能性較小,這篇文章里就不涉及了。數(shù)據(jù)分析師培訓(xùn)

> arrive1<-"2011-08-10 13:50:00"
> leave1<-"2011-08-10 14:00:09"
> int1<-interval(arrive1,leave1)
> int1 %within% int
[1] FALSE
> int %within% int1
[1] TRUE

有了時(shí)間區(qū)間的定義,我們還可以判斷一個(gè)時(shí)間區(qū)間是否在另一個(gè)時(shí)間區(qū)間里面,用"%within%"操作符。

> as.period(int1)
[1] "10M 9S"
> int1 / dminutes(1)
[1] 10.15

如上還可以查看或計(jì)算一個(gè)時(shí)間區(qū)間的長(zhǎng)度。

數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢(xún)
客服在線
立即咨詢(xún)
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }