185  時間の型(sld95)

library(tidyverse)
library(lubridate)

それでは、本セクション最後の話題を説明していきましょう。

時間の型についてです。

時間をRで扱う場合は、lubridateというpackageがtidyverseに含まれるものとして便利なので、本コースではそれを利用して解説していきます。

時間を表すデータには

の二つがあります。   これらの正体は、ただの数字なのですが、ある日を基準として時間を表しています。

library(tidyverse)
library(lubridate)

まず日付型からみていきます。

日付型を作成するのは、as_date関数です。as_dateには、数字を入れることもできますし

pdate1 <- lubridate::as_date(0)

文字列型を入れることもできます。

pdate2 <- lubridate::as_date("1970-1-1")

この日付型ですが、

pdate1 #印字すると日付がでて
[1] "1970-01-01"
class(pdate1) #classをみるとDate型とでます
[1] "Date"
as.numeric(pdate1) #数字に戻すと、0で
[1] 0
as.character(pdate1) #文字列にすると、表示された日になります
[1] "1970-01-01"

ちょっと因子型みたいですね。

pdate2もおなじように

pdate2
[1] "1970-01-01"
class(pdate2)
[1] "Date"
as.numeric(pdate2)
[1] 0
as.character(pdate2)
[1] "1970-01-01"

この日付型、0を日付に変換すると、1970-1-1でした。

実は、日付型は、正体が数字で、1970年1月1日を起点として何日経過しているか(あるいは何日前か)というところで表示されています。

なので、1970年1月1日を0日として、10000日目は、

as_date(10000)
[1] "1997-05-19"

となります。

時刻がついたデータも同じ様に作成することができて、

t1 <- as_datetime(1)

t1
[1] "1970-01-01 00:00:01 UTC"
class(t1) # POSIXct POSIXt というクラスがついており
[1] "POSIXct" "POSIXt" 
as.numeric(t1) #数字に変換すると1、
[1] 1
as.character(t1) #文字列に変換すると日付―時刻という形
[1] "1970-01-01 00:00:01"

になります。

この関数も文字列型から日付時刻型に変換することが可能で、

t2 <- as_datetime("2000-01-01 12:30:45")
t2
[1] "2000-01-01 12:30:45 UTC"
class(t2)
[1] "POSIXct" "POSIXt" 
as.numeric(t2)
[1] 946729845
as.character(t2)
[1] "2000-01-01 12:30:45"

こんな感じです。

どうでしょうか?

ただの数字が時刻や日付に変わっているの、すこし不思議に感じるかもしれませんが、これで、時間や時刻データを扱える基本が身に付きました。

次は文字列を日付型や時刻型に変換する方法を少し詳しくみていきましょう。