R Language
lubridate
Поиск…
Синтаксис
- ymd_hms (..., quiet = FALSE, tz = "UTC", locale = Sys.getlocale ("LC_TIME"))
- теперь (tzone = "")
- интервал (начало, конец, tzone = attr (начало, «tzone»))
- duration (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
Пакет lubridate
предоставляет удобные функции для форматирования объектов даты и даты и времени из символьных строк. Функции являются перестановками
Письмо | Элемент для анализа | Базовый эквивалент R |
---|---|---|
Y | год | %y , %Y |
m (с y и d) | месяц | %m , %b , %h , %B |
d | день | %d , %e |
час | час | %H , %I%p |
m (с h и s) | минут | %M |
s | секунд | %S |
например ymd()
для разбора даты с годом, за которым следует месяц, за которым следует день, например "2016-07-22"
или ymd_hms()
для разбора даты и времени в порядке год, месяц, день, часы, минуты, секунд, например, "2016-07-22 13:04:47"
.
Функции могут распознавать большинство разделителей (например, /
, -
и пробелы) без дополнительных аргументов. Они также работают с непоследовательными разделителями.
Даты
Функции даты возвращают объект класса 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
Полезные функции
DateTimes может быть проанализирован с помощью ymd_hms
варианты , включая ymd_hm
и ymd_h
. Все функции datetime могут принимать аргумент tz
timezone, аналогичный аргументу as.POSIXct
или strptime
, но по умолчанию используется "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
также включает три функции для синтаксического анализа datetimes с помощью строки форматирования, например as.POSIXct
или strptime
:
функция | Класс вывода | Форматирование строк |
---|---|---|
parse_date_time | POSIXct | Гибкое. Будет принимать strptime стиль с % или lubridate datetime имя функции, например, "ymd hms" . Примут вектор заказов для гетерогенных данных и угадают, что подходит. |
parse_date_time2 | По умолчанию POSIXct; if lt = TRUE , POSIXlt | Строгий. Принимает только токены strptime (с или без % ) из ограниченного набора. |
fast_strptime | По умолчанию POSIXlt; if lt = FALSE , POSIXct | Строгий. Принимает только % -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
.
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
Интервалы, длительности и периоды
Интервалы - это самый простой способ записи временных интервалов в lubridate. Интервал представляет собой промежуток времени, который происходит между двумя конкретными моментами .
# 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
Длительность измеряет точное количество времени, которое происходит между двумя моментами.
duration(60, "seconds")
## [1] "60s"
duration(2, "minutes")
## [1] "120s (~2 minutes)"
Примечание. Единицы больше, чем недели, не используются из-за их изменчивости.
Длительность может быть создана с использованием dseconds
, dminutes
и других вспомогательных функций продолжительности.
Запустить ?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)"
Периоды измеряют изменение часового времени, которое происходит между двумя моментами.
Периоды могут быть созданы с использованием функции period
а также других вспомогательных функций, таких как seconds
, hours
и т. Д. Чтобы получить полный список вспомогательных функций периода, запустите « ?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"
Разница между периодом и продолжительностью
В отличие от длительностей, периоды могут использоваться для точного моделирования времени такта, не зная, когда происходят такие события, как прыжки секунд, прыжки дней и изменения DST.
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"