R Language
潤滑油
サーチ…
構文
- ymd_hms(...、quiet = FALSE、tz = "UTC"、ロケール= Sys.getlocale( "LC_TIME"))
- 今すぐ(tzone = "")
- 間隔(開始、終了、tzone = attr(開始、 "tzone"))
- 期間(num = NULL、units = "seconds"、...)
- 期間(num = NULL、units = "second"、...)
備考
CRANからパッケージをインストールするには
install.packages("lubridate")
Githubから開発版をインストールするには:
library(devtools)
# dev mode allows testing of development packages in a sandbox, without interfering
# with the other packages you have installed.
dev_mode(on=T)
install_github("hadley/lubridate")
dev_mode(on=F)
lubridateパッケージのビネットを取得するには:
vignette("lubridate")
関数foo
に関する助けを得るには:
help(foo) # help about function foo
?foo # same thing
# Example
# help("is.period")
# ?is.period
関数foo
例を得るには:
example("foo")
# Example
# example("interval")
潤滑剤付きの文字列からの日付と日付時刻の解析
lubridate
パッケージは、文字列から日付オブジェクトと日時オブジェクトを整形する便利な機能を提供します。関数は
文字 | 解析する要素 | ベースR相当 |
---|---|---|
y | 年 | %y 、 %Y |
m(yとdを含む) | 月 | %m 、 %b 、 %h 、 %B |
d | 日 | %d 、 %e |
h | 時間 | %H 、 %I%p |
m(hとs) | 分 | %M |
s | 秒 | %S |
年、月、日、時、分などの順序で日付時刻を解析する場合は、 ymd()
を使用して、年と日付の後に月を続けて解析しますymd_hms()
例: "2016-07-22"
またはymd_hms()
秒(例: "2016-07-22 13:04:47"
。
関数は、追加の引数なしで、ほとんどのセパレータ( /
、 -
、空白など)を認識できます。また、一貫性のないセパレータでも動作します。
日付
date関数はDate
クラスのオブジェクトを返します。
library(lubridate)
mdy(c(' 07/02/2016 ', '7 / 03 / 2016', ' 7 / 4 / 16 '))
## [1] "2016-07-02" "2016-07-03" "2016-07-04"
ymd(c("20160724","2016/07/23","2016-07-25")) # inconsistent separators
## [1] "2016-07-24" "2016-07-23" "2016-07-25"
Datetimes
ユーティリティ関数
日付時刻を使用して解析することができるymd_hms
含むバリアントymd_hm
とymd_h
。すべてのdatetime関数は、 as.POSIXct
またはstrptime
ようなtz
タイムゾーン引数を受け入れることができますが、ローカルタイムゾーンではなく"UTC"
にデフォルト設定されています。
datetime関数は、 POSIXct
クラスのオブジェクトを返します。
x <- c("20160724 130102","2016/07/23 14:02:01","2016-07-25 15:03:00")
ymd_hms(x, tz="EST")
## [1] "2016-07-24 13:01:02 EST" "2016-07-23 14:02:01 EST"
## [3] "2016-07-25 15:03:00 EST"
ymd_hms(x)
## [1] "2016-07-24 13:01:02 UTC" "2016-07-23 14:02:01 UTC"
## [3] "2016-07-25 15:03:00 UTC"
パーサ関数
lubridate
には、 as.POSIXct
やstrptime
ような書式指定文字列を使ってdatetimeを解析する3つの関数も含まれています:
関数 | 出力クラス | 受け入れた文字列の書式設定 |
---|---|---|
parse_date_time | POSIXct | フレキシブル。受け入れるstrptime でスタイルを% またはlubridate 日時関数名のスタイル、たとえば"ymd hms" 。異機種データの注文ベクトルを受け入れ、適切であると推測します。 |
parse_date_time2 | デフォルトのPOSIXct。 lt = TRUE 場合、POSIXlt | 厳しい制限付きセットからのstrptime トークン( % 付きまたはなし)のみを受け入れます。 |
fast_strptime | デフォルトPOSIXlt; lt = FALSE 、POSIXctのlt = FALSE | 厳しいのみ受け付け% -delimited strptime (デリミタ付きトークン- / 、 : 限定されたセットから、など)。 |
x <- c('2016-07-22 13:04:47', '07/22/2016 1:04:47 pm')
parse_date_time(x, orders = c('mdy Imsp', 'ymd hms'))
## [1] "2016-07-22 13:04:47 UTC" "2016-07-22 13:04:47 UTC"
x <- c('2016-07-22 13:04:47', '2016-07-22 14:47:58')
parse_date_time2(x, orders = 'Ymd HMS')
## [1] "2016-07-22 13:04:47 UTC" "2016-07-22 14:47:58 UTC"
fast_strptime(x, format = '%Y-%m-%d %H:%M:%S')
## [1] "2016-07-22 13:04:47 UTC" "2016-07-22 14:47:58 UTC"
parse_date_time2
とfast_strptime
は効率のために高速なCパーサを使用します。
トークンをフォーマットするには?parse_date_time
を参照してください。
lubridateの日付と時刻の解析
Lubridateは、文字列を日付に解析するための関数ymd()
提供します。文字y、m、およびdは、日時の年、月、日の各要素に対応します。
mdy("07-21-2016") # Returns Date
## [1] "2016-07-21"
mdy("07-21-2016", tz = "UTC") # Returns a vector of class POSIXt
## "2016-07-21 UTC"
dmy("21-07-2016") # Returns Date
## [1] "2016-07-21"
dmy(c("21.07.2016", "22.07.2016")) # Returns vector of class Date
## [1] "2016-07-21" "2016-07-22"
lubridateの日付と時刻の操作
date <- now()
date
## "2016-07-22 03:42:35 IST"
year(date)
## 2016
minute(date)
## 42
wday(date, label = T, abbr = T)
# [1] Fri
# Levels: Sun < Mon < Tues < Wed < Thurs < Fri < Sat
day(date) <- 31
## "2016-07-31 03:42:35 IST"
# If an element is set to a larger value than it supports, the difference
# will roll over into the next higher element
day(date) <- 32
## "2016-08-01 03:42:35 IST"
インスタント
瞬間は特定の瞬間です。ある瞬間を参照する任意の日時オブジェクトは瞬間として認識されます。オブジェクトが瞬間かどうかをテストするには、 is.instant
使用しis.instant
。
library(lubridate)
today_start <- dmy_hms("22.07.2016 12:00:00", tz = "IST") # default tz="UTC"
today_start
## [1] "2016-07-22 12:00:00 IST"
is.instant(today_start)
## [1] TRUE
now_dt <- ymd_hms(now(), tz="IST")
now_dt
## [1] "2016-07-22 13:53:09 IST"
is.instant(now_dt)
## [1] TRUE
is.instant("helloworld")
## [1] FALSE
is.instant(60)
## [1] FALSE
間隔、期間および期間
インターバルは、潤滑油中のタイムパンを記録する最も簡単な方法です。間隔は、2つの特定の瞬間の間に生じる時間のスパンです。
# create interval by substracting two instants
today_start <- ymd_hms("2016-07-22 12-00-00", tz="IST")
today_start
## [1] "2016-07-22 12:00:00 IST"
today_end <- ymd_hms("2016-07-22 23-59-59", tz="IST")
today_end
## [1] "2016-07-22 23:59:59 IST"
span <- today_end - today_start
span
## Time difference of 11.99972 hours
as.interval(span, today_start)
## [1] 2016-07-22 12:00:00 IST--2016-07-22 23:59:59 IST
# create interval using interval() function
span <- interval(today_start, today_end)
[1] 2016-07-22 12:00:00 IST--2016-07-22 23:59:59 IST
持続時間は、2つの瞬間間に生じる正確な時間量を測定します。
duration(60, "seconds")
## [1] "60s"
duration(2, "minutes")
## [1] "120s (~2 minutes)"
注:週単位を超える単位は、その変動性のために使用されません。
期間は使用して作成することができdseconds
、 dminutes
およびその他の期間のヘルパー関数を。
完全なリストについては、 ?quick_durations
を実行して?quick_durations
。
dseconds(60)
## [1] "60s"
dhours(2)
## [1] "7200s (~2 hours)"
dyears(1)
## [1] "31536000s (~365 days)"
期間を減算して瞬間に追加して、新しい瞬間を得ることができます。
today_start + dhours(5)
## [1] "2016-07-22 17:00:00 IST"
today_start + dhours(5) + dminutes(30) + dseconds(15)
## [1] "2016-07-22 17:30:15 IST"
期間は間隔で作成できます。
as.duration(span)
[1] "43199s (~12 hours)"
期間は、2つのインスタント間で発生するクロック時間の変化を測定します。
期間は、 period
機能、 seconds
、 hours
などの他のヘルパー機能を使用して作成することができます。期間ヘルパー機能の完全なリストを取得するには、 ?quick_periods
実行し?quick_periods
。
period(1, "hour")
## [1] "1H 0M 0S"
hours(1)
## [1] "1H 0M 0S"
period(6, "months")
## [1] "6m 0d 0H 0M 0S"
months(6)
## [1] "6m 0d 0H 0M 0S"
years(1)
## [1] "1y 0m 0d 0H 0M 0S"
is.period
関数を使用して、オブジェクトがピリオドであるかどうかを調べることができます。
is.period(years(1))
## [1] TRUE
is.period(dyears(1))
## [1] FALSE
丸めの日付
now_dt <- ymd_hms(now(), tz="IST")
now_dt
## [1] "2016-07-22 13:53:09 IST"
round_date()
は、日時オブジェクトを取得し、指定された時間単位の最も近い整数値に丸めます。
round_date(now_dt, "minute")
## [1] "2016-07-22 13:53:00 IST"
round_date(now_dt, "hour")
## [1] "2016-07-22 14:00:00 IST"
round_date(now_dt, "year")
## [1] "2017-01-01 IST"
floor_date()
は日時オブジェクトをとり、指定された時間単位の最も近い整数値に丸めます。
floor_date(now_dt, "minute")
## [1] "2016-07-22 13:53:00 IST"
floor_date(now_dt, "hour")
## [1] "2016-07-22 13:00:00 IST"
floor_date(now_dt, "year")
## [1] "2016-01-01 IST"
ceiling_date()
は、日時オブジェクトを取得し、指定された時間単位の最も近い整数値に丸めます。
ceiling_date(now_dt, "minute")
## [1] "2016-07-22 13:54:00 IST"
ceiling_date(now_dt, "hour")
## [1] "2016-07-22 14:00:00 IST"
ceiling_date(now_dt, "year")
## [1] "2017-01-01 IST"
期間と期間の差
期間とは異なり、うるう秒、うるう年、夏時間の変更などのイベントがいつ発生するかを知らずに、期間を正確にモデル化するために期間を使用することができます。
start_2012 <- ymd_hms("2012-01-01 12:00:00")
## [1] "2012-01-01 12:00:00 UTC"
# period() considers leap year calculations.
start_2012 + period(1, "years")
## [1] "2013-01-01 12:00:00 UTC"
# Here duration() doesn't consider leap year calculations.
start_2012 + duration(1)
## [1] "2012-12-31 12:00:00 UTC"
時間帯
with_tz
は、異なるタイムゾーンに表示される日時を返します。
nyc_time <- now("America/New_York")
nyc_time
## [1] "2016-07-22 05:49:08 EDT"
# corresponding Europe/Moscow time
with_tz(nyc_time, tzone = "Europe/Moscow")
## [1] "2016-07-22 12:49:08 MSK"
force_tz
は、新しいタイムゾーンのxと同じ時計時刻を持つ日付時刻を返します。
nyc_time <- now("America/New_York")
nyc_time
## [1] "2016-07-22 05:49:08 EDT"
force_tz(nyc_time, tzone = "Europe/Moscow") # only timezone changes
## [1] "2016-07-22 05:49:08 MSK"