R(日付と時刻)

2023年12月 2日 (土)

[R]日付時刻型ベクトルを作成する

readrパッケージのparse_datetime関数を使うと、文字列から簡単に日付時刻型ベクトルを作ることができる。ただし、その際はタイムゾーンを指定する必要がある。。format関数を使うと、第1引数に与えた日付時刻型ベクトルから文字列型ベクトルを作ることができる。その際の出力は、加工することができる。

> library(readr)
> parse_datetime("2001-12-23 12:34:56")
[1] "2001-12-23 12:34:56 UTC"
> Sys.timezone()
[1] "Asia/Tokyo"
> parse_datetime("2001-12-23 12:34:56", locale = locale(tz = "Asia/Tokyo"))
[1] "2001-12-23 12:34:56 JST"
> dtm <- parse_datetime("2001-12-23 12:34:56", locale = locale(tz = "Asia/Tokyo"))
> mode(dtm)
[1] "numeric"
> class(dtm)
[1] "POSIXct" "POSIXt"
> format(dtm, "%Y/%m/%d %H時%M分%S秒 %Z")
[1] "2001/12/23 12時34分56秒 JST"
> dtm <- parse_datetime(c("2001-12-23 12:34:56", "2002-02-23 23:45:12"), locale = locale(tz = "Asia/Tokyo"))
> dtm
[1] "2001-12-23 12:34:56 JST" "2002-02-23 23:45:12 JST"
> format(dtm, "%Y/%m/%d %H時%M分%S秒 %Z")
[1] "2001/12/23 12時34分56秒 JST" "2002/02/23 23時45分12秒 JST"

2023年12月 1日 (金)

[R]日付時刻型ベクトルを作成する

as.POSIXct関数を使うと、文字列から簡単に日付時刻型ベクトルを作ることができる。format関数を使うと、第1引数に与えた日付時刻型ベクトルから文字列型ベクトルを作ることができる。その際の出力は、加工することができる。

> as.POSIXct("2001-12-23 12:34:56")
[1] "2001-12-23 12:34:56 JST"
> dtm <- as.POSIXct("2001-12-23 12:34:56")
> mode(dtm)
[1] "numeric"
> class(dtm)
[1] "POSIXct" "POSIXt"
> format(dtm, "%Y/%m/%d %H時%M分%S秒 %Z")
[1] "2001/12/23 12時34分56秒 JST"
> dtm <- as.POSIXct(c("2001-12-23 12:34:56", "2002-02-23 23:45:12"))
> dtm
[1] "2001-12-23 12:34:56 JST" "2002-02-23 23:45:12 JST"
> format(dtm, "%Y/%m/%d %H時%M分%S秒")
[1] "2001/12/23 12時34分56秒" "2002/02/23 23時45分12秒"

2023年11月30日 (木)

[R]タイムゾーンIDを一覧形式で得る

その環境下に搭載されているタイムゾーンを識別するID(タイムゾーンID)を一覧形式で得るには、OlsonNames関数を使う。

> OlsonNames()
[1] "Africa/Abidjan" "Africa/Accra"
[3] "Africa/Addis_Ababa" "Africa/Algiers"
[5] "Africa/Asmara" "Africa/Asmera"
(以下、表示省略)
> grep("Tokyo", OlsonNames())
[1] 322
> grep("Tokyo", OlsonNames(), value = TRUE)
[1] "Asia/Tokyo"

2023年11月29日 (水)

[R]現在の環境のタイムゾーンを得る

Sys.timezone関数を使う。以下は、Windowsの日本語版バージョン4.3.1で実行した例。

> Sys.timezone()
[1] "Asia/Tokyo"

2023年10月 4日 (水)

[R]2つの日付から年の差を得る

簡単に求めるには、以下のようにseq関数とlength関数を組み合わせればよい。差が1年未満であれば0、1年~2年未満であれば1、…が得られる。

> length(seq(as.Date("2020-02-15"), as.Date("2020-02-15"), by = "year")) - 1
[1] 0
> length(seq(as.Date("2020-02-15"), as.Date("2020-02-16"), by = "year")) - 1
[1] 0
> length(seq(as.Date("2020-02-15"), as.Date("2021-02-14"), by = "year")) - 1
[1] 0
> length(seq(as.Date("2020-02-15"), as.Date("2021-02-15"), by = "year")) - 1
[1] 1
> length(seq(as.Date("2020-02-15"), as.Date("2021-02-16"), by = "year")) - 1
[1] 1
> length(seq(as.Date("2020-02-15"), as.Date("2031-02-14"), by = "year")) - 1
[1] 10
> length(seq(as.Date("2020-02-15"), as.Date("2031-02-15"), by = "year")) - 1
[1] 11
> length(seq(as.Date("2020-02-15"), as.Date("2031-02-16"), by = "year")) - 1
[1] 11

2023年9月 5日 (火)

[R]日付時刻型ベクトルの特定の要素(年、月、日、時、分、秒)だけを修正する

lubridateパッケージのupdate関数を使う。

> library(lubridate)
> dttm <- ymd_hms("2012-12-31 12:34:56", "2034-01-02 23:45:12", tz = "Japan")
> print(dttm)
[1] "2012-12-31 12:34:56 JST" "2034-01-02 23:45:12 JST"
> update(dttm, month = 3)
[1] "2012-03-31 12:34:56 JST" "2034-03-02 23:45:12 JST"
> update(dttm, hour = 7)
[1] "2012-12-31 07:34:56 JST" "2034-01-02 07:45:12 JST"

2023年9月 4日 (月)

[R]日や時間などをしてして日付時刻型ベクトルを作成する

lubridateパッケージのymd_hms関数を使う。年、月、日、時、分、秒をすべて指定する必要がある。tzオプションにタイムゾーンの情報も適切に指定する必要がある。指定しないとUTCの日付時刻を作成する。

> library(lubridate)
> dttm <- ymd_hms("2012-12-31")
警告メッセージ:
All formats failed to parse. No formats found.
> dttm <- ymd_hms("2012-12-31 12:34:56")
> print(dttm)
[1] "2012-12-31 12:34:56 UTC"
> dttm <- ymd_hms("2012-12-31 12:34:56", "2034-01-02 23:45:12")
> print(dttm)
[1] "2012-12-31 12:34:56 UTC" "2034-01-02 23:45:12 UTC"
> dttm <- ymd_hms("2012-12-31 12:34:56", "2034-01-02 23:45:12", tz = "Japan")
> print(dttm)
[1] "2012-12-31 12:34:56 JST" "2034-01-02 23:45:12 JST"
> dttm <- ymd_hms("2012-12-31 12:34:56", "2034-01-02 23:45", tz = "Japan")
警告メッセージ:
1 failed to parse.
> typeof(dttm)
[1] "double"
> class(dttm)
[1] "POSIXct" "POSIXt"
> mode(dttm)
[1] "numeric"

2023年8月25日 (金)

[R]スクリプト内で処理時間を計算して表示する

開始時と終了時にそれぞれSys.time関数で現在の日時を取得し、最後にdifftime関数でその差を計算して表示すればよい。以下をスクリプトファイルdifftime.Rに保存をして、実行してみる。途中にSys.sleep関数を使用して意図的に3秒間処理を止めている。

dtibegin <- Sys.time()
Sys.sleep(3)
dtiend <- Sys.time()
d <- difftime(dtiend, dtibegin, units = "secs")
cat(sprintf("処理時間: %.2f秒\n", d))

実行結果

> source("difftime.R")
処理時間: 3.07秒

2023年7月29日 (土)

[R]n年後の日付を得る

lubridateパッケージのyears関数を使う。引数には加算(減算)したい月数を整数で指定する。引数に「1」を指定すれば翌年、「-1」を指定すれば前年の日付を返す。

ymdはlubridateパッケージに含まれる、文字列から日付を得る関数。years関数の引数にベクトルを指定すれば、ベクトル単位で計算を行う。

> library(lubridate)
> da <- ymd("2000-12-23", "2123-04-05")
> da <- da + years(1)
> print(da)
[1] "2001-12-23" "2124-04-05"
> da <- da + years(-2)
> print(da)
[1] "1999-12-23" "2122-04-05"
> ymd("2000-12-23") + years(2:3)
[1] "2002-12-23" "2003-12-23"
> ymd("2000-12-23", "2010-12-23") + years(2:3)
[1] "2002-12-23" "2013-12-23"

2023年7月28日 (金)

[R]n日後の日付を得る

lubridateパッケージのdays関数を使う。引数には加算(減算)したい日数を整数で指定する。引数に「1」を指定すれば翌日、「-1」を指定すれば前日の日付を返す。

ymdはlubridateパッケージに含まれる、文字列から日付を得る関数。days関数の引数にベクトルを指定すれば、ベクトル単位で計算を行う。

> library(lubridate)
> da <- ymd("2000-12-23", "2123-04-05")
> print(da)
[1] "2000-12-23" "2123-04-05"
> da <- da + days(2)
> print(da)
[1] "2000-12-25" "2123-04-07"
> da <- da + days(-5)
> print(da)
[1] "2000-12-20" "2123-04-02"
> da <- da + days(365)
> print(da)
[1] "2001-12-20" "2124-04-01"
> ymd("2000-12-23") + days(2:3)
[1] "2000-12-25" "2000-12-26"
> ymd("2000-12-23", "2010-12-23") + days(2:3)
[1] "2000-12-25" "2010-12-26"
無料ブログはココログ

■■

■■■