欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

R語(yǔ)言與格式,日期格式,格式轉(zhuǎn)化的操作

 更新時(shí)間:2021年04月19日 10:55:22   作者:悟乙己  
這篇文章主要介紹了R語(yǔ)言與格式,日期格式,格式轉(zhuǎn)化的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

R語(yǔ)言的基礎(chǔ)包中提供了兩種類型的時(shí)間數(shù)據(jù),一類是Date日期數(shù)據(jù),它不包括時(shí)間和時(shí)區(qū)信息,另一類是POSIXct/POSIXlt類型數(shù)據(jù),其中包括了日期、時(shí)間和時(shí)區(qū)信息。

基本總結(jié)如下:

日期data,存儲(chǔ)的是天;

時(shí)間POSIXct 存儲(chǔ)的是秒,POSIXlt 打散,年月日不同;

日期-時(shí)間=不可運(yùn)算。

一般來(lái)講,R語(yǔ)言中建立時(shí)序數(shù)據(jù)是通過(guò)字符型轉(zhuǎn)化而來(lái),但由于時(shí)序數(shù)據(jù)形式多樣,而且R中存貯格式也是五花八門,例如Date/ts/xts/zoo/tis/fts等等。lubridate包(后續(xù)有介紹,應(yīng)用四),timeDate包,都有用。

常見(jiàn)的格式:

as.numeric 轉(zhuǎn)化為數(shù)值型
as.logic 轉(zhuǎn)化為邏輯型
as.complex 轉(zhuǎn)化為復(fù)數(shù)型
as.character 轉(zhuǎn)化為字符型
as.array 轉(zhuǎn)化為數(shù)組
as.data.frame 轉(zhuǎn)化為數(shù)據(jù)框
d<-as.character(z) #將數(shù)值向量z<-(0:9)轉(zhuǎn)化為字符向量c("0", "1", "2", ..., "9")。  
as.integer(d)         #將d轉(zhuǎn)化為數(shù)值向量  
e <- numeric()     #產(chǎn)生一個(gè)numeric型的空向量e  
a=data.frame(a)  #變成R的數(shù)據(jù)框  
factor()               #變成因子  可以用levels()來(lái)看因子個(gè)數(shù)  

在data.frame中,是可以實(shí)現(xiàn)數(shù)據(jù)集重命名的,比如data.frame(x=iris,y=cars),

也可以實(shí)現(xiàn)橫向、縱向重命名,data.frame(x=iris,y=cars,row.names=iris)

后續(xù)加更內(nèi)容

應(yīng)用1——如何通過(guò)生日計(jì)算年齡

應(yīng)用2——日期分組

應(yīng)用三——生成按天的時(shí)間序列并進(jìn)行回歸

應(yīng)用四:靈活處理時(shí)間數(shù)據(jù)—lubridate包(來(lái)源TipDM)

應(yīng)用五:如何在循環(huán)、函數(shù)中,輸出實(shí)時(shí)時(shí)間消耗?

時(shí)間的標(biāo)準(zhǔn)格式

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

默認(rèn)情況下,日期之前是以/或者-進(jìn)行分隔,而時(shí)間則以:進(jìn)行分隔;

輸入的標(biāo)準(zhǔn)格式為:日期 時(shí)間(日期與時(shí)間中間有空隔隔開(kāi))

時(shí)間的標(biāo)準(zhǔn)格式為:時(shí):分 或者 時(shí):分:秒;

如果輸入的格式不是標(biāo)準(zhǔn)格式,則同樣需要使用strptime函數(shù),利用format來(lái)進(jìn)行指定。

一、日期型數(shù)據(jù)——data

1、as.Data函數(shù)

在R中自帶的日期形式為:as.Date();以數(shù)值形式存儲(chǔ);

對(duì)于規(guī)則的格式,則不需要用format指定格式;如果輸入的格式不規(guī)則,可以通過(guò)format指定的格式讀入;其中以1970-01-01定義為第0天,之后的年份會(huì)以距離這天來(lái)計(jì)算。

> x<-as.Date("1970-01-01") 
> unclass(x) 
[1] 0
> 
> unclass(as.Date("1970-02-01")) #19700201代表第31天
[1] 31

代碼解讀:unclass可以將日期變成以天來(lái)計(jì)數(shù),比如1970-02-01輸出的31,就代表著距離1970-01-01有31天。

as.data中的參數(shù)格式:年-月-日或者年/月/日;如果不是以上二種格式,則會(huì)提供錯(cuò)誤——錯(cuò)誤于charTo按照Date(x) : 字符串的格式不夠標(biāo)準(zhǔn)明確;

例如這樣的數(shù)據(jù)格式,就常常報(bào)錯(cuò)。

19:15.

顯示為:2011/1/1 19:15

as.Date('23-2013-1',format='%d-%Y-%m')  
#其中這個(gè)%d%Y可以節(jié)選其中一個(gè)
#%Y%y  大寫代表年份四位數(shù),小寫代表年份二位數(shù),要注意

2、%d%y%m-基本格式

格式

意義

%d

月份中當(dāng)?shù)奶鞌?shù)

%m

月份,以數(shù)字形式表示

%b

月份,縮寫

%B

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

%y

年份,以二位數(shù)字表示

%Y

年份,以四位數(shù)字表示

#其它日期相關(guān)函數(shù)

weekdays()取日期對(duì)象所處的周幾;

months()取日期對(duì)象的月份;

quarters()取日期對(duì)象的季度。

二、時(shí)間型——POSIXct與POSIXlt

POSIXct 是以1970年1月1號(hào)開(kāi)始的以秒進(jìn)行存儲(chǔ),如果是負(fù)數(shù),則是1970-01-01年以前;正數(shù)則是1970年以后。

POSIXlt 是以列表的形式存儲(chǔ):年、月、日、時(shí)、分、秒,作用是打散時(shí)間;

1、POSIXlt 格式

主要特點(diǎn):作用是打散時(shí)間,把時(shí)間分成年、月、日、時(shí)、分、秒,并進(jìn)行存儲(chǔ)。

可以作為時(shí)間篩選的一種。

> today<-Sys.time()
> unclass(as.POSIXlt(today))
$sec
[1] 53.27151
 
$min
[1] 38
 
$hour
[1] 20
 
$mday
[1] 6
 
$mon
[1] 5
 
$year
[1] 116
 
$wday
[1] 1
 
$yday
[1] 157
 
$isdst
[1] 0
 
$zone
[1] "CST"
 
$gmtoff
[1] 28800
 
attr(,"tzone")
[1] ""    "CST" "CDT"

代碼解讀:unclass將時(shí)間打散。

2、POSIXct 格式

主要特點(diǎn):以秒進(jìn)行存儲(chǔ)。

> today<-Sys.time()
> today
[1] "2016-06-06 20:42:22 CST"
> unclass(as.POSIXct(today))
[1] 1465216942

解讀:比如今天,unclass之后,代表今天2016-06-06距離1970-01-01為1465216942秒。

#GMT代表時(shí)區(qū),德意志時(shí)間,CST也代表時(shí)區(qū)

三、時(shí)間運(yùn)算

1、基本運(yùn)算函數(shù)

Sys.Date()                 #字符串類型
typeof(Sys.Date())   #系統(tǒng)日期類型

2、直接加減

相同的格式才能相互減,不能加。二進(jìn)列的+法對(duì)"Date"、"POSIXt"對(duì)象不適用。

> as.Date("2011-07-01") - as.Date(today)
Time difference of -1802 days
> as.POSIXct(today)-as.POSIXct(as.Date("2012-10-25 01:00:00"))
Time difference of 1320.529 days
> as.POSIXlt(today)-as.POSIXlt(as.Date("2012-10-25 01:00:00"))
Time difference of 1320.529 days

相互減之后,一般結(jié)果輸出的天數(shù)。

3、difftime函數(shù)——計(jì)算時(shí)差

不同格式的時(shí)間都可以進(jìn)行運(yùn)算。并且可以實(shí)現(xiàn)的是計(jì)算兩個(gè)時(shí)間間隔:秒、分鐘、小時(shí)、天、星期。

但是不能計(jì)算年、月、季度的時(shí)間差。

gtd <- as.Date("2011-07-01") 
difftime(as.POSIXct(today), gtd, units="hours")    #只能計(jì)算日期差,還可以是“secs”, “mins”, “hours”, “days”

4、format函數(shù)——提取關(guān)鍵信息

> today<-Sys.time()
> format(today,format="%B-%d-%Y")
[1] "六月-06-2016"

format函數(shù)可以將時(shí)間格式,調(diào)節(jié)成指定時(shí)間樣式。format(today,format="%Y")其中的format可以自由調(diào)節(jié),獲取你想要的時(shí)間信息。

并且format函數(shù)可以識(shí)別as.Data型以及POSIXct與POSIXlt型,將其日期進(jìn)行提取與之后要討論的split類型。

> today<-Sys.time()
> format(as.Date(today),format="%Y")
[1] "2016"
> format(as.POSIXlt(today),format="%Y")
[1] "2016"
> format(as.POSIXct(today),format="%Y")
[1] "2016"

但是format出來(lái)的時(shí)間不能直接做減法,會(huì)出現(xiàn)錯(cuò)誤: non-numeric argument to binary operator

5、strptime函數(shù)

該函數(shù)是將字符型時(shí)間轉(zhuǎn)化為 "POSIXlt" 和"POSIXct"兩類。跟format比較相似。

strptime之后的時(shí)間是可以直接做減法,因?yàn)橹苯邮?POSIXlt" 和"POSIXct"格式了。

> strptime("2006-01-08 10:07:52", "%Y-%m-%d")-strptime("2006-01-15 10:07:52", "%Y-%m-%d")
Time difference of -7 days
> class(strptime("2006-01-08 10:07:52", "%Y-%m-%d"))
[1] "POSIXlt" "POSIXt"

四、遇見(jiàn)的問(wèn)題

1、常常報(bào)錯(cuò)。

錯(cuò)誤于charTo按照Date(x) : 字符串的格式不夠標(biāo)準(zhǔn)明確。這個(gè)錯(cuò)誤經(jīng)常出現(xiàn),我本來(lái)的數(shù)據(jù)格式是

19:15.

后來(lái)?yè)Q成“2011/1/1”這樣的就不會(huì)報(bào)錯(cuò)了,需要數(shù)據(jù)庫(kù)自動(dòng)改變。

#幾種錯(cuò)誤匯總
dtV<-data.frame(as.POSIXct(a$b,format="%d.%m.%Y")) #錯(cuò),讀出來(lái)都是NA
as.Date(a$b, "%Y年%m月%d日")  #錯(cuò),讀不出來(lái)
as.POSIXct(strptime(a$b, "%Y-%m-%d"))  #讀不出來(lái)

#轉(zhuǎn)化成xts格式也讀不出來(lái)
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))
#錯(cuò)

#轉(zhuǎn)化成數(shù)值型也不對(duì)
c=as.numeric(sales[,2]) 

2、excel另存為csv時(shí)發(fā)生的錯(cuò)誤。

一位網(wǎng)友說(shuō):我以前是在excel里另存為csv格式,百度上說(shuō)CSV檔如果以EXCEL開(kāi)啟,由于計(jì)算機(jī)檔案數(shù)據(jù)轉(zhuǎn)換的原因,會(huì)將其CRC之?dāng)?shù)值改做科學(xué)記號(hào)方式儲(chǔ)存,而造成檔案中的 CRC值發(fā)生錯(cuò)誤。

應(yīng)用1——如何通過(guò)生日計(jì)算年齡

1、format函數(shù)

timeformat<-function(x){
  format(as.POSIXct(x),format="%Y")
}
sapply(as.Date(data$birthdate),timeformat)

format只能一個(gè)一個(gè)操作,可以先寫成函數(shù),然后計(jì)算得出年份,之后用如今的年份相減得到年齡。

2、字符型——strsplit

先轉(zhuǎn)化為字符型,然后進(jìn)行分割。

data.frame(sapply(as.character(data$birthdate),function(x){strsplit(x,"-")[[1]][1]}))

注意,其中strsplit中的"-",根據(jù)具體時(shí)間格式情況來(lái)定義。

應(yīng)用2——日期分組

一種按照日期范圍——例如按照周、月、季度或者年——對(duì)其進(jìn)行分組的超簡(jiǎn)便處理方式:R語(yǔ)言的cut()函數(shù)。

假設(shè)vector中存在以下示例數(shù)據(jù):

vDates <- as.Date(c("2013-06-01", "2013-07-08", "2013-09-01", "2013-09-15")) #as.Data()函數(shù)的作用非常重要;如果沒(méi)有它,R語(yǔ)言會(huì)認(rèn)為以上內(nèi)容僅僅是數(shù)字串而非日期對(duì)象
 [1] "2013-06-01" "2013-07-08" "2013-09-01" "2013-09-15" 
vDates.bymonth <- cut(vDates, breaks = "month") 
[1] 2013-06-01 2013-07-01 2013-09-01 2013-09-01
Levels: 2013-06-01 2013-07-01 2013-08-01 2013-09-01
Dates <- data.frame(vDates, vDates.bymonth) 

應(yīng)用三——生成按天的時(shí)間序列并進(jìn)行回歸

如果是生成簡(jiǎn)單的年度,月度數(shù)據(jù),ts函數(shù)可以滿足,但是如果生成的是每天。因?yàn)橛虚c年緣故,所以zoo包可以很好地解決這個(gè)問(wèn)題。

還有筆者在做一個(gè)簡(jiǎn)單的時(shí)間序列回歸時(shí)候,疑惑:

做關(guān)于時(shí)間序列的ols最小二乘法回歸方程,按年來(lái)好說(shuō),但是如果是按天,如果進(jìn)行計(jì)算呢?

1、把天變成一排規(guī)律遞增的數(shù)字來(lái)代替;

2、ts函數(shù)變化之后,也是變成一個(gè)遞增的數(shù)字。

以上兩種,做的結(jié)果都一樣,所以沒(méi)有什么太大的區(qū)別。

關(guān)于ts函數(shù)by day每一天的時(shí)間序列生成,該如何呢?

n=30
t<-ts(1:n,frequency=1,start=as.Date("2010-01-09"))

生成一個(gè)按天的時(shí)間序列。

應(yīng)用四:靈活處理時(shí)間數(shù)據(jù)—lubridate包(來(lái)源TipDM)

lubridate包是由Garrett Grolemund 和 Hadley Wickham寫的,可以靈活地處理時(shí)間數(shù)據(jù)。lubridate包主要有兩類函數(shù),一類是處理時(shí)點(diǎn)數(shù)據(jù)(time instants),另一類是處理時(shí)段數(shù)據(jù)(time spans)。

1、時(shí)點(diǎn)類函數(shù)

主要包括解析、抽取、修改。

2、時(shí)段類函數(shù)

可以處理三類對(duì)象,分別是:

interval:最簡(jiǎn)單的時(shí)段對(duì)象,它由兩個(gè)時(shí)點(diǎn)數(shù)據(jù)構(gòu)成。

duration:去除了時(shí)間兩端的信息,純粹以秒為單位計(jì)算時(shí)段的長(zhǎng)度,不考慮閏年和閏秒,它同時(shí)也兼容基本包中的difftime類型對(duì)象。

period:以較長(zhǎng)的時(shí)鐘周期來(lái)計(jì)算時(shí)段長(zhǎng)度,它考慮了閏年和閏秒,適用于長(zhǎng)期的時(shí)間計(jì)算。以2012年為例,duration計(jì)算的一年是標(biāo)準(zhǔn)不變的365天,而period計(jì)算的一年就會(huì)變成366天。

有了時(shí)點(diǎn)和時(shí)段數(shù)據(jù),就可以進(jìn)行各種計(jì)算了。

3、時(shí)區(qū)信息

lubridate包提供了三個(gè)函數(shù):

tz:提取時(shí)間數(shù)據(jù)的時(shí)區(qū)

with_tz:將時(shí)間數(shù)據(jù)轉(zhuǎn)換為另一個(gè)時(shí)區(qū)的同一時(shí)間

force_tz:將時(shí)間數(shù)據(jù)的時(shí)區(qū)強(qiáng)制轉(zhuǎn)換為另一個(gè)時(shí)區(qū)

應(yīng)用五:如何在循環(huán)、函數(shù)中,輸出實(shí)時(shí)時(shí)間消耗?

想知道循環(huán)中進(jìn)行到哪里?這樣可以合理安排函數(shù)進(jìn)程。那么怎么辦呢?

第一辦法:使用Rstudio 1.0版本,里面有一個(gè)Profiling with profvis,可以很好的對(duì)你函數(shù)每一步的耗時(shí)進(jìn)行參看。

R︱Rstudio 1.0版本嘗鮮(R notebook、下載鏈接、sparkR、代碼時(shí)間測(cè)試profile)

當(dāng)然,這個(gè)不能實(shí)時(shí)輸出內(nèi)容。

第二辦法:利用difftime函數(shù)

t1 = Sys.time()
for (i in 1:5){
a=a+1
b=a*a
print(difftime(Sys.time(), t1, units = 'sec'))
}

先預(yù)設(shè)當(dāng)前時(shí)間,然后用difftime+print方式,循環(huán)輸出。

應(yīng)用六:因子型數(shù)據(jù)轉(zhuǎn)化為數(shù)值型

因子型轉(zhuǎn)化的時(shí)候會(huì)發(fā)現(xiàn),譬如10000這個(gè)數(shù)字,會(huì)變?yōu)?,也就是因子型里面對(duì)應(yīng)的次序,這樣并不是我們想要的。所以,可以先變?yōu)樽址蚢s.character:

as.numeric(as.character(data))

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 解決R語(yǔ)言報(bào)錯(cuò):Error?in?y?+?1:non-numeric?argument?to?binary?operator

    解決R語(yǔ)言報(bào)錯(cuò):Error?in?y?+?1:non-numeric?argument?to?binary

    R語(yǔ)言編程中的常見(jiàn)錯(cuò)誤有一些錯(cuò)誤是R的初學(xué)者和經(jīng)驗(yàn)豐富的R程序員都可能常犯的,下面這篇文章主要給大家介紹了關(guān)于解決R語(yǔ)言報(bào)錯(cuò):Error?in?y?+?1:non-numeric?argument?to?binary?operator的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • R語(yǔ)言繪制Bubble Matrix氣泡矩陣圖

    R語(yǔ)言繪制Bubble Matrix氣泡矩陣圖

    這篇文章主要為大家介紹了R語(yǔ)言繪制Bubble Matrix氣泡矩陣圖的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步
    2022-02-02
  • R語(yǔ)言繪制直方圖實(shí)例講解

    R語(yǔ)言繪制直方圖實(shí)例講解

    在本篇內(nèi)容里小編給大家整理了一篇關(guān)于R語(yǔ)言繪制直方圖實(shí)例講解內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2021-04-04
  • R語(yǔ)言繪制坐標(biāo) 保存圖片的操作

    R語(yǔ)言繪制坐標(biāo) 保存圖片的操作

    這篇文章主要介紹了R語(yǔ)言繪制坐標(biāo) 保存圖片的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • R語(yǔ)言數(shù)據(jù)可視化繪圖bar chart條形圖實(shí)現(xiàn)示例

    R語(yǔ)言數(shù)據(jù)可視化繪圖bar chart條形圖實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了R語(yǔ)言數(shù)據(jù)可視化繪圖bar chart條形圖的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • R語(yǔ)言操作XML文件實(shí)例分析

    R語(yǔ)言操作XML文件實(shí)例分析

    在本篇文章里小編給大家整理的是一篇關(guān)于R語(yǔ)言操作XML文件實(shí)例分析,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-05-05
  • R語(yǔ)言中fread使用方法

    R語(yǔ)言中fread使用方法

    在R語(yǔ)言中,fread函數(shù)是data.table包中的一個(gè)功能強(qiáng)大的數(shù)據(jù)讀取函數(shù),可以用于快速讀取大型數(shù)據(jù)文件,它比基本的read.table和read.csv函數(shù)更快,尤其在處理大型數(shù)據(jù)集時(shí)效果更為明顯,這篇文章主要介紹了R語(yǔ)言中fread使用方法,需要的朋友可以參考下
    2023-12-12
  • R語(yǔ)言 數(shù)據(jù)表匹配和拼接 merge函數(shù)的使用

    R語(yǔ)言 數(shù)據(jù)表匹配和拼接 merge函數(shù)的使用

    這篇文章主要介紹了R語(yǔ)言 數(shù)據(jù)表匹配和拼接 merge函數(shù)的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • 基于R語(yǔ)言for循環(huán)的替換方案

    基于R語(yǔ)言for循環(huán)的替換方案

    這篇文章主要介紹了基于R語(yǔ)言for循環(huán)的替換方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • R語(yǔ)言:排序的應(yīng)用操作

    R語(yǔ)言:排序的應(yīng)用操作

    這篇文章主要介紹了R語(yǔ)言:排序的應(yīng)用操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04

最新評(píng)論