Ho sebetsa le matsatsi ho R (bokhoni ba mantlha, hammoho le liphutheloana tsa lubridate le timeperiodsR)

Fumana letsatsi la hajoale ka puo efe kapa efe ea lenaneo, ts'ebetso e lekanang le "Hello world!" Puo ea R le eona e joalo.

Sehloohong sena, re tla sheba hore na ho sebetsa le matsatsi ho sebetsa joang ka syntax ea mantlha ea puo ea R, hape re shebe liphutheloana tse 'maloa tse sebetsang tse eketsang bokhoni ba eona ha u sebetsa le matsatsi:

  • lubridate - sephutheloana se u lumellang ho etsa lipalo tsa lipalo lipakeng tsa matsatsi;
  • timeperiodsR - sephutheloana sa ho sebetsa ka linako tsa nako le likarolo tsa tsona.

Ho sebetsa le matsatsi ho R (bokhoni ba mantlha, hammoho le liphutheloana tsa lubridate le timeperiodsR)

Tse ka hare

Haeba u thahasella ho hlahloba lintlha, 'me haholo-holo puo ea R, u ka' na ua thahasella ka thelekramo и mang youtube dikanale. Boholo ba litaba bo nehetsoe puong ea R.

  1. Ho sebetsa le matsatsi ho syntax ea mantlha ea R
    1.1. Fetolela mongolo ho letsatsi
    1.2. Ho ntša likarolo tsa letsatsi ho R
  2. Ho sebetsa le matsatsi ho sebelisa sephutheloana sa lubridate
    2.1. Fetolela mongolo hore o be oa letsatsi o sebelisa lubridate
    2.2. Ho ntša likarolo tsa letsatsi ho sebelisa sephutheloana sa lubridate
    2.3. Lits'ebetso tsa Arithmetic tse nang le matsatsi
  3. Mosebetsi o nolofalitsoeng ka linako, sephutheloana sa timeperiodsR
    3.1. Mekhahlelo ea nako ka nakoR
    3.2. Ho sefa vector ea matsatsi u sebelisa timeperiodsR
  4. fihlela qeto e

Ho sebetsa le matsatsi ho syntax ea mantlha ea R

Fetolela mongolo ho letsatsi

Basic R e na le sehlopha sa mesebetsi ea ho sebetsa le matsatsi. Bobebe ba poleloana ea mantlha ke hore taba ea mabitso a tšebetso le likhang li hasane haholo 'me ha e na khokahano e utloahalang. Leha ho le joalo, o hloka ho tseba mesebetsi ea mantlha ea puo, kahoo re tla qala ka eona.

Hangata ha o kenya data ho R, ho tsoa lifaeleng tsa csv, kapa mehloling e meng, o fumana letsatsi joalo ka mongolo. Ho fetolela mongolo ona ho mofuta o nepahetseng oa data, sebelisa ts'ebetso as.Date().

# создаём текстовый вектор с датами
my_dates <- c("2019-09-01", "2019-09-10", "2019-09-23")

# проверяем тип данных
class(my_dates)

#> [1] "character"

# преобразуем текст в дату
my_dates <- as.Date(my_dates)

# проверяем тип данных
class(my_dates)

#> [1] "Date"

ke default as.Date() e amohela letsatsi ka mefuta e 'meli: YYYY-MM-DD kapa YYYY/MM/DD.
Haeba data ea hau e na le matsatsi a mofuta o mong, o ka sebelisa khang format.

as.Date("September 26, 2019", format = "%B %d, %Y")

thalong e amohela li-operators ka mokhoa oa likhoele tse bontšang nako efe kapa efe ea nako le sebopeho sa eona; boleng bo sebelisoang haholo bo bontšoa tafoleng e ka tlase:

Sebopeho
tlhaloso

%d
Nomoro ea letsatsi ka khoeli

%a
Kgutsufatso ya lebitso la letsatsi la beke

%A
Lebitso le felletseng la letsatsi la beke

%w
Palo ea letsatsi la beke (0-6, moo 0 e leng Sontaha)

%m
Lebitso la khoeli la linomoro tse peli (01-12)

%b
Khutsufatso ea lebitso la khoeli (April, Mar, ...)

%B
Khoeli e felletseng lebitso

%y
Tlhaloso ea lilemo tse peli

%Y
Tlhaloso ea lilemo tse 'nè

%j
Nomoro ea letsatsi ka selemo (001 - 366)

%U
Palo ea beke ka selemo (00 - 53), ho qala beke Sontaha

%W
Nomoro ea beke selemong (00 - 53), qalong ea beke Mantaha

Ka hona, "La 26 Loetse 2019" ke lebitso le felletseng la khoeli, letsatsi le selemo. Sebopeho sa letsatsi lena se ka hlalosoa ho sebelisoa li-operators ka tsela e latelang:"%B %d, %Y".

Moo:

  • %B — Lebitso le felletseng la khoeli
  • %d - Palo ea letsatsi ka khoeli
  • %Y - Tlhaloso ea lilemo tse 'nè

Ha o hlalosa sebopeho sa letsatsi, ho bohlokoa ho kenyelletsa litlhaku tsohle tse eketsehileng ho tsoa khoeleng ea hau, joalo ka li-dashes, li-commas, linako, libaka, joalo-joalo. Mohlala oa ka, "La 26 Loetse 2019", ho na le phegelwana kamora letsatsi, mme hape o hloka ho kenya phegelwana ka tlhaloso ya sebopeho:"%B %d, %Y".

Ho na le maemo ha u fumana letsatsi le sa lumellaneng le lifomate tse tloaelehileng (YYYY-MM-DD kapa YYYY/MM/DD), empa hape le ka puo e fapaneng le ea kamehla e kentsoeng tsamaisong ea hau ea ho sebetsa. Ka mohlala, u khoasolla data moo letsatsi le bontšitsoeng tjena: "La 15 Tšitoe 2019." Pele o fetolela khoele ena ho letsatsi, o hloka ho fetola sebaka.

# Меняем локаль
Sys.setlocale("LC_TIME", "Russian")
# Конвертируем строку в дату
as.Date("Декабрь 15, 2019 г.", format = "%B %d, %Y")

Ho ntša likarolo tsa letsatsi ho R

Ha ho na mesebetsi e mengata ho R ea mantlha e u lumellang ho ntša karolo efe kapa efe ea letsatsi ho ntho ea sehlopha letsatsi.

current_date <- Sys.Date() # текущая дата
weekdays(current_date)     # получить номер дня недели
months(current_date)       # получить номер месяца в году
quarters(current_date)     # получить номер квартала в году

Ho phaella ho sehlopha sa ntho e ka sehloohong letsatsi motheong oa R ho na le mefuta e meng e 2 ea data e bolokang setempe sa nako: POSIXlt, POSIXct. Phapang e kholo lipakeng tsa lihlopha tsena le letsatsi ke hore ho phaella ho letsatsi leo ba bolokang nako.

# получить текущую дату и время
current_time <- Sys.time()

# узнать класс объекта current_time 
class(current_time)

# "POSIXct" "POSIXt"

Mosebetsi Sys.time() e khutlisetsa letsatsi le nako ea hajoale ka sebopeho POSIXct. Sebopeho sena se tšoana ka moelelo le NTHABISENG, mme e boloka palo ea metsotsoana ho tloha qalong ea nako ea UNIX (har'a mp'a bosiu (UTC) ho tloha ka la 31 Tšitoe, 1969 ho isa la 1 Pherekhong 1970).

Sehlopha POSIXlt e boetse e boloka nako le letsatsi, le likarolo tsohle tsa tsona. Ka hona, ke ntho e nang le sebopeho se rarahaneng, empa seo ho leng bonolo ho fumana karolo ea letsatsi le nako hobane haele hantle POSIXlt e siyo lenaneng.

# Получаем текущую дату и время
current_time_ct <- Sys.time()

# Преобразуем в формат POSIXlt
current_time_lt <- as.POSIXlt(current_time_ct)

# извлекаем компоненты даты и времени
current_time_lt$sec   # секунды
current_time_lt$min   # минуты
current_time_lt$hour  # часы
current_time_lt$mday  # день месяца
current_time_lt$mon   # месяц
current_time_lt$year  # год
current_time_lt$wday  # день недели
current_time_lt$yday  # день года
current_time_lt$zone  # часовой пояс

Ho fetolela data ea linomoro le mongolo ho lifomete POSIX* e etsoang ka mesebetsi as.POSIXct() и as.POSIXlt(). Mesebetsi ena e na le likhang tse nyane.

  • x - Nomoro, khoele kapa ntho ea sehlopha letsatsi, e hlokang ho fetoloa;
  • tz - Sebaka sa nako, "GMT" ea kamehla;
  • sebopeho - Tlhaloso ea sebopeho sa letsatsi leo data e fetiselitsoeng ho x khang e emetsoeng ka eona;
  • tšimoloho - E sebelisoa feela ha o fetolela nomoro ho POSIX; o ​​tlameha ho fetisa ntho ea letsatsi le nako eo metsotsoana e baloang ho eona khang ena. E sebelisoa hangata ho fetolela ho tsoa ho UNIXTIME.

Haeba lintlha tsa hau tsa letsatsi le nako li kene NTHABISENG, ebe ho li fetolela hore e be letsatsi le hlakileng, le ka baloang, sebelisa mohlala o latelang:

# Конвертируем UNIXTIME в читаемую дату 
as.POSIXlt(1570084639,  origin = "1970-01-01")

Ho tloha qalong, o ka hlakisa setempe sefe kapa sefe sa nako. Mohlala, haeba data ea hau e na le letsatsi le nako joalo ka palo ea metsotsoana ho tloha ka la 15 Loetse 2019 12:15 pm, ebe u e fetolela ho tšebeliso ea letsatsi:

# Конвертируем UNIXTIME в дату учитывая что начало отсчёта 15 сентября 2019 12:15
as.POSIXlt(1546123,  origin = "2019-09-15 12:15:00")

Ho sebetsa le matsatsi ho sebelisa sephutheloana sa lubridate

lubridate Mohlomong sephutheloana se tummeng ka ho fetisisa sa ho sebetsa le matsatsi a puo ea R. E u fa lihlopha tse tharo tse eketsehileng.

  • durations - nako, i.e. palo ea metsotsoana pakeng tsa litempe tsa linako tse peli;
  • linako - linako li u lumella ho etsa lipalo lipakeng tsa matsatsi ka linako tse ka baloang ke batho: matsatsi, likhoeli, libeke, joalo-joalo;
  • linako - lintho tse fanang ka sebaka sa ho qala le ho qetela ka nako.

Ho kenya liphutheloana tse eketsehileng ka puo ea R ho etsoa ka mokhoa o tloaelehileng install.packages().

Ho kenya sephutheloana lubridate:

install.packages("lubridate")

Fetolela mongolo hore o be oa letsatsi o sebelisa lubridate

Likarolo tsa sephutheloana lubridate nolofatsa mokhoa oa ho fetolela mongolo ho letsatsi, hape o u lumella ho etsa ts'ebetso efe kapa efe ea arithmetic ka matsatsi le linako.

Lisebelisoa li tla u thusa ho fumana letsatsi kapa letsatsi le nako ea hajoale today() и now().

today() # текущая дата
now()   # текущая дата и время

Ho fetolela khoele ho letsatsi ho lubridate Ho na le lelapa lohle la mesebetsi eo mabitso a eona a lulang a e-na le litlhaku tse tharo, 'me a bontša tatellano ea likarolo tsa letsatsi:

  • y - selemo
  • m - khoeli
  • d - letsatsi

Lenane la mesebetsi ea ho fetolela mongolo ho ba oa morao-rao ka lubridate

  • ymd()
  • ydm()
  • mdy()
  • myd()
  • dmy()
  • dym()
  • yq()

Mehlala e meng ea ho fetolela likhoele ho matsatsi:

ymd("2017 jan 21")
mdy("March 20th, 2019")
dmy("1st april of 2018")

Joalo ka ha u bona lubridate E sebetsa hantle haholo ho elelloe litlhaloso tsa matsatsi joalo ka mongolo, 'me e u lumella ho fetolela mongolo ho ba letsatsi ntle le ho sebelisa li-opereishene tse ling ho hlalosa sebopeho.

Ho ntša likarolo tsa letsatsi ho sebelisa sephutheloana sa lubridate

E boetse e sebelisoa lubridate o ka fumana karolo efe kapa efe ho tloha ka letsatsi:

dt <- ymd("2017 jan 21")

year(dt)  # год
month(dt) # месяц
mday(dt)  # день в месяце
yday(dt)  # день в году
wday(dt)  # день недели

Lits'ebetso tsa Arithmetic tse nang le matsatsi

Empa ts'ebetso ea bohlokoa ka ho fetisisa le ea mantlha lubridate ke bokhoni ba ho etsa mesebetsi e fapaneng ea lipalo ka matsatsi.

Ho bokella letsatsi ho etsoa ka mesebetsi e meraro:

  • floor_date — ho pota lekgatheng le haufi le fetileng
  • ceiling_date - ho pota-pota ka nako e tlang e haufi
  • round_date - ho potoloha ho isa nakong e haufi

E 'ngoe le e' ngoe ea mesebetsi ena e na le khang unite u lumellang hore u hlalose yuniti ea ho potoloha: ea bobeli, motsotso, hora, letsatsi, beke, khoeli, khoeli, kotara, nako, halofo ea selemo, selemo.

dt <- ymd("2017 jan 21")

round_date(dt, unit = "month")    # округлить до месяца
round_date(dt, unit = "3 month")  # округлить до 3 месяцев
round_date(dt, unit = "quarter")  # округлить до квартала
round_date(dt, unit = "season")   # округлить до сезона
round_date(dt, unit = "halfyear") # округлить до полугодия

Kahoo ha re boneng hore na re ka fumana letsatsi joang e leng matsatsi a 8 kamora letsatsi la hajoale mme re etse lipalo tse ling tse fapaneng tsa lipalo lipakeng tsa matsatsi ana a mabeli.

today() + days(8)   # какая дата будет через 8 дней
today() - months(2) # какая дата была 2 месяца назад
today() + weeks(12) # какая дата будет через 12 недель
today() - years(2)  # какая дата была 2 года назад

Mosebetsi o nolofalitsoeng ka linako, sephutheloana sa timeperiodsR.

timeperiodsR - sephutheloana se secha sa ho sebetsa le matsatsi se phatlalalitsoeng ho CRAN ka Loetse 2019.

Ho kenya sephutheloana timeperiodsR:

install.packages("timeperiodsR")

Sepheo se seholo ke ho tseba ka potlako nako e itseng ea nako e amanang le letsatsi le fanoeng. Ka mohlala, ho sebelisa mesebetsi ea eona u ka ba bonolo:

  • Fumana beke e fetileng, khoeli, kotara kapa selemo ka R.
  • Fumana palo e itseng ea linako tse amanang le letsatsi, mohlala, libeke tse 4 tse fetileng.
  • Ho bonolo ho ntša likarolo tsa eona ho tloha nakong ea nako e hlahisoang: letsatsi la ho qala le la ho qetela, palo ea matsatsi a kenyelelitsoeng ka nako, tatellano eohle ea matsatsi a kenyelletsoeng ho eona.

Lebitso la mesebetsi eohle ea liphutheloana timeperiodsR li bonolo ebile li na le likarolo tse peli: tataiso_karohano, moo:

  • tataiso eo ho eona u hlokang ho falla mabapi le letsatsi le fanoeng: last_n, fetileng, sena, latelang, latelang_n.
  • nakoana karohano ho bala nako: letsatsi, beke, khoeli, kotara, selemo.

Sete e felletseng ea mesebetsi:

  • last_n_days()
  • last_n_weeks()
  • last_n_months()
  • last_n_quarters()
  • last_n_years()
  • previous_week()
  • previous_month()
  • previous_quarter()
  • previous_year()
  • this_week()
  • this_month()
  • this_quarter()
  • this_year()
  • next_week()
  • next_month()
  • next_quarter()
  • next_year()
  • next_n_days()
  • next_n_weeks()
  • next_n_months()
  • next_n_quarters()
  • next_n_years()
  • custom_period()

Mekhahlelo ea nako ka nakoR

Mesebetsi ena e na le thuso maemong ao ho ona o hlokang ho etsa litlaleho ho latela lintlha tsa beke kapa khoeli e fetileng. Ho fumana khoeli e fetileng, sebelisa ts'ebetso ea lebitso le tšoanang previous_month():

prmonth <- previous_month()

Ka mor'a moo u tla ba le ntho khoeli класса tpr, moo likarolo tse latelang li ka fumanoang habonolo:

  • letsatsi la ho qala ha nako, mohlaleng oa rona ena ke khoeli ea ho qetela
  • letsatsi la ho qetela la nako
  • palo ea matsatsi a kenyelelitsoeng nakong
  • tatellano ea matsatsi a kenyellelitsoeng nako

Ho feta moo, o ka fumana e 'ngoe le e' ngoe ea likarolo ka litsela tse fapaneng:

# первый день периода
prmonth$start
start(prmonth)

# последний день периода
prmonth$end
end(prmonth)

# последовательность дат
prmonth$sequence
seq(prmonth)

# количество дней входящих в период
prmonth$length
length(prmonth)

U ka boela ua fumana leha e le efe ea likarolo ho sebelisa khang karolo, e teng ho e 'ngoe le e' ngoe ea mesebetsi ea sephutheloana. Maemo a ka bang teng: qalo, qetello, tatelano, bolelele.

previous_month(part = "start")    # начало периода
previous_month(part = "end")      # конец периода
previous_month(part = "sequence") # последовательность дат
previous_month(part = "length")   # количество дней в периоде

Kahoo a re shebeng likhang tsohle tse teng mesebetsing ea sephutheloana timeperiodsR:

  • x - Letsatsi la referense leo nako ea nako e tla baloa ho tloha ho lona, ​​letsatsi la hona joale ka ho sa feleng;
  • n - Palo ea linako tse tla kenyelletsoa nakong, mohlala libeke tse 3 tse fetileng;
  • part - Ke karolo efe ya ntho tpr u hloka ho fumana, ka ho sa feleng all;
  • week_start - Khang e teng feela mesebetsing ea ho sebetsa le libeke, 'me e u lumella ho beha palo ea letsatsi la beke e tla nkoa e le qalo ea eona. 1 - Mantaha ho isa ho 7 - Sontaha.

Kahoo, o ka bala nako efe kapa efe e amanang le letsatsi la hajoale kapa le leng le fanoeng; mehlala e meng ke ena:

# получить 3 прошлые недели
# от 6 октября 2019 года
# начало недели - понедельник
last_n_weeks(x = "2019-10-06", 
             n = 3, 
             week_start = 1)

 Time period: from  9 September of 2019, Monday to 29 September of 2019, Sunday

La 6 Mphalane ke Sontaha:
Ho sebetsa le matsatsi ho R (bokhoni ba mantlha, hammoho le liphutheloana tsa lubridate le timeperiodsR)

Re hloka nako eo, e amanang le la 6 Mphalane, e tla nka libeke tse 3 tse fetileng. Ho sa kenyellehe beke e kenyelletsang October 6 ka boeona. Ka hona, ena ke nako ea ho tloha ka la 9 Loetse ho isa ho la 29 Loetse.

Ho sebetsa le matsatsi ho R (bokhoni ba mantlha, hammoho le liphutheloana tsa lubridate le timeperiodsR)

# получить месяц отстающий на 4 месяца
# от 16 сентября 2019 года
previous_month(x = "2019-09-16", n = 4)

 Time period: from  1 May of 2019, Wednesday to 31 May of 2019, Friday

Mohlaleng ona, re khahliloe ke khoeli e neng e le likhoeli tse 4 tse fetileng, haeba re qala ho tloha ka la 16 Loetse 2019, e ne e le Mots'eanong 2019.

Ho sefa vector ea matsatsi u sebelisa timeperiodsR

Ho sefa matsatsi ho timeperiodsR Ho na le basebelisi ba 'maloa:

  • %left_out% - e bapisa dintho tse pedi tsa tpr class, mme e kgutlisa boleng ho tloha ho le letshehadi le sieo ho le letona.
  • %left_in% - e bapisa dintho tse pedi tsa sehlopha sa tpr, mme e kgutlisa matsatsi ho tswa ho ntho e letshehadi e kenyeleditsweng ho e nepahetseng.
  • %right_out% - e bapisa dintho tse pedi tsa tpr class, mme e kgutlisa boleng ho tswa ho e nepahetseng e sieo ho le letshehadi.
  • %right_in% - e bapisa lintho tse peli tsa sehlopha sa tpr, le ho khutlisa matsatsi ho tsoa ho ntho e nepahetseng e teng ho le letšehali.

period1 <- this_month("2019-11-07")
period2 <- previous_week("2019-11-07")

period1 %left_in% period2   # получить даты из period1 которые входят в period2
period1 %left_out% period2  # получить даты из period1 которые не входят в period2
period1 %right_in% period2  # получить даты из period2 которые входят в period1
period1 %right_out% period2 # получить даты из period2 которые не входят в period1

Sephuthelong timeperiodsR ho na le ea molao, ea puo ea Serussia Lenane la lipina la YouTube.

fihlela qeto e

Re hlahlobile ka botlalo lihlopha tsa lintho tse entsoeng ka puo ea R bakeng sa ho sebetsa le matsatsi. Hape joale o ka etsa ts'ebetso ea lipalo ka matsatsi, 'me kapele u fumane linako tsa nako u sebelisa sephutheloana timeperiodsR.

Haeba u thahasella puo ea R, ke u mema hore u ingolise ho mocha oa ka oa thelekramo R4mmaraka, eo ho eona ke arolelanang lisebelisoa tsa bohlokoa letsatsi le leng le le leng mabapi le ho sebelisa puo ea R ho rarolla mathata a hau a letsatsi le letsatsi.

Source: www.habr.com

Eketsa ka tlhaloso