R(日付と時刻)

2023年1月29日 (日)

[R]書式を指定して文字列型ベクトルを日付型ベクトルに変換する

strptime関数を使う。戻り値はPOSIXlt型(時刻とタイムゾーンを持つ日付型で、実態は秒単位の整数型)。

> s <- c("2001-02-03", "2002-04-05")
> strptime(s, "%Y-%m-%d")
[1] "2001-02-03 JST" "2002-04-05 JST"
> s <- c("2001/02/03", "2002/04/05")
> strptime(s, "%Y/%m/%d")
[1] "2001-02-03 JST" "2002-04-05 JST"
> dt <- strptime(s, "%Y/%m/%d")
> class(dt)
[1] "POSIXlt" "POSIXt"

POSIXlt型のため、時刻も扱える(タイムゾーンも)。

> s <- c("2001-02-03T12:24:56", "2002-04-05T01:02:03")
> strptime(s, "%Y-%m-%dT%H:%M:%S")
[1] "2001-02-03 12:24:56 JST" "2002-04-05 01:02:03 JST"

POSIXlt型の実態は秒単位の整数型のため、整数で演算をすると、以下のような結果になる。

> dt <- strptime(s, "%Y-%m-%dT%H:%M:%S")
> dt
[1] "2001-02-03 12:34:56 JST" "2002-04-05 01:02:03 JST"
> dt + 3
[1] "2001-02-03 12:34:59 JST" "2002-04-05 01:02:06 JST"

書式はstrptimeに書かれている。

> ?strptime

2022年12月27日 (火)

[R]文字列から日付を作成する

as.Date関数もしくはstrptime関数を使う。as.Dateは一部の書式にしか対応しておらず、as.Date関数で対応していない書式の場合は、strptime関数を使う。



> s1 <- c("1991/02/03", "1991/2/3")
> s2 <- c("1991-02-03", "1991-2-3")
> s3 <- c("91/2/3")
> as.Date(c(s1, s2, s3))
[1] "1991-02-03" "1991-02-03" NA NA "0091-02-03"
> strptime(s2, "%Y-%m-%d")
[1] "1991-02-03 JST" "1991-02-03 JST"
> strptime(s3, "%y/%m/%d")
[1] "1991-02-03 JST"


%Yなどの書式文字列については、strptimeのヘルプを参照のこと。



> ?strptime

2022年8月21日 (日)

[R]月の日数を得る

lubridateパッケージのdays_in_month関数を使う。例えば、2000年2月の日数(この年はうるう年のため29)、2022年8月の日数(31)を求める。

> library(lubridate)
> dt <- as.Date(c("2000-02-01", "2022-08-01"))
> days_in_month(dt)
Feb Aug
29 31
> typeof(days_in_month(dt))
[1] "integer"

HmiscパッケージのmonthDays関数も使える。

> library(Hmisc)
> dt <- as.Date(c("2000-02-01", "2022-08-01"))
> monthDays(dt)
[1] 29 31
> typeof(monthDays(dt))
[1] "integer"

2022年8月17日 (水)

[R]年月日(数値型)から日付型ベクトルを作成する

ISOdate関数を使う。戻り値はPOSIXct。タイムゾーンを指定しないとGMTになってしまうことに注意。タイムゾーンの情報が不要であれば、戻り値をas.Date関数に通すと通常の日付型になる。

> ISOdate(2000, 1, 24)
[1] "2000-01-24 12:00:00 GMT"
> ISOdate(2000, 1, 24, tz = "Japan")
[1] "2000-01-24 12:00:00 JST"
> class((ISOdate(2000, 1, 24)))
[1] "POSIXct" "POSIXt"
> as.Date((ISOdate(2000, 1, 24)))
[1] "2000-01-24"

2022年7月30日 (土)

[R]日時の計算を行う

difftime関数を使う。引数に、比較をする日、基準とする日の順に日付オブジェクトを与える。unitsオプションにいろいろ与えることで、返却値の単位を指定することができる。

> dt1 <- as.Date("2002-01-02")
> dt2 <- as.Date("2002-01-05")
> difftime(dt2, dt1)
Time difference of 3 days
> difftime(dt2, dt1, units = "hours")
Time difference of 72 hours
> difftime(dt2, dt1, units = "days")
Time difference of 3 days
> difftime(dt2, dt1, units = "hours")
Time difference of 72 hours

返却値の値は計算に使用することができる。

> n <- difftime(dt2, dt1, units = "hours")
> print(n / 8)
Time difference of 9 hours

2022年7月23日 (土)

[R]日付型ベクトルの宣言と初期化

日付を扱うための変数(ベクトル)を使うには、その日付を格納する領域を用意して、それに名前を付ける必要がある。これを宣言という。

日付型変数(ベクトル)はas.Date関数に書式に従った文字列リテラルを与えることで宣言することができる。ベクトルの長さを得るにはlength関数を使う。

> dt <- as.Date(c("2001-01-01", "2001-01-03"))
> print(dt)
[1] "2001-01-01" "2001-01-03"
> length(dt)
[1] 2

2022年7月20日 (水)

[R]日付を文字列に変換する

format関数を使う。format関数はベクトルを扱える。文字列に変換する書式はformatオプションを使うことができる。

> da <- as.Date(c("2014-12-01", "2014-12-31"))
> format(da)
[1] "2014-12-01" "2014-12-31"
> mode(format(da))
[1] "character"
> class(format(da))
[1] "character"
> format(da, format = "%Y/%m/%d")
[1] "2014/12/01" "2014/12/31"

2022年7月 1日 (金)

[R]現在の日時を取得する

日付だけであればSys.Date関数を、日時を得る場合はSys.time関数を使う。

> Sys.Date()
[1] "2022-06-30"
> Sys.time()
[1] "2022-06-30 23:06:14 JST"

Sys.Date関数の戻り値は日付型で、Sys.time関数の戻り値はPOSIXct型である。

> dt <- Sys.Date()
> class(dt)
[1] "Date"
> dt <- Sys.time()
> class(dt)
[1] "POSIXct" "POSIXt"
無料ブログはココログ