Ag obair le cinn-latha ann an R (comasan bunaiteach, a bharrachd air na pasganan lubridate agus timeperiodsR)

Faigh an ceann-latha làithreach ann an cànan prògramadh sam bith, gnìomhachd co-ionann ri "Hello world!" Tha an cànan R mar eisgeachd.

San artaigil seo, seallaidh sinn ri mar a tha obrachadh le cinn-latha ag obair ann an co-chòrdadh bunaiteach a’ chànain R, agus bheir sinn sùil cuideachd air grunn phasganan feumail a leudaicheas a chomasan nuair a bhios tu ag obair le cinn-latha:

  • lubridate - pasgan a leigeas leat àireamhachadh àireamhachd a dhèanamh eadar cinn-latha;
  • timeperiodsR - pasgan airson a bhith ag obair le amannan agus na co-phàirtean aca.

Ag obair le cinn-latha ann an R (comasan bunaiteach, a bharrachd air na pasganan lubridate agus timeperiodsR)

Clàr-innse

Ma tha ùidh agad ann am mion-sgrùdadh dàta, agus gu sònraichte an cànan R, is dòcha gu bheil ùidh agad ann an mo telegram и youtube seanailean. Tha a’ mhòr-chuid den t-susbaint coisrigte don chànan R.

  1. Ag obair le cinn-latha ann an co-chòrdadh bunaiteach R
    1.1. Tionndaidh teacsa gu ceann-latha
    1.2. A’ toirt a-mach pàirtean cinn-latha ann am bun-bheachd R
  2. Ag obair le cinn-latha a’ cleachdadh a’ phacaid lubridate
    2.1. Tionndaidh teacsa gu latha le bhith a’ cleachdadh lubridate
    2.2. A 'toirt a-mach co-phàirtean ceann-latha a' cleachdadh a 'phacaid lubridate
    2.3. Gnìomhan àireamhachd le cinn-latha
  3. Obair shìmplidh le amannan, pasgan ùine R
    3.1. Uair ceart ann an raon ùine R
    3.2. A’ sìoladh vectar cinn-latha a’ cleachdadh timeperiodsR
  4. co-dhùnadh

Ag obair le cinn-latha ann an co-chòrdadh bunaiteach R

Tionndaidh teacsa gu ceann-latha

Tha seata de ghnìomhan aig Basic R airson obrachadh le cinn-latha. Is e an eas-bhuannachd a tha aig a’ cho-chòrdadh bunaiteach gu bheil cùis ainmean gnìomh agus argamaidean gu math sgapte agus cha mhòr nach eil ceangal loidsigeach aige. Ach, feumaidh fios a bhith agad air gnìomhan bunaiteach a 'chànain, agus mar sin tòisichidh sinn leotha.

Mar as trice nuair a bhios tu a’ luchdachadh dàta gu R, bho fhaidhlichean csv, no bho thùsan eile, gheibh thu ceann-latha mar theacsa. Gus an teacsa seo a thionndadh chun t-seòrsa dàta ceart, cleachd an gnìomh 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"

bho thùs as.Date() gabhail ri ceann-latha ann an dà chruth: YYYY-MM-DD no BBBB/MM/DD.
Ma tha cinn-latha ann an cruth air choireigin eile san t-seata dàta agad, faodaidh tu an argamaid a chleachdadh format.

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

Inneal a 'Chlàir a’ gabhail ri gnìomhaichean ann an cruth sreang a’ comharrachadh eadar-ama sam bith agus an cruth aige; tha na luachan as cumanta air an sealltainn sa chlàr gu h-ìosal:

Faidhle
Tuairisgeul

%d
Àireamh latha sa mhìos

%a
Giorrachadh airson ainm latha na seachdain

%A
Ainm slàn latha na seachdain

%w
Àireamh latha na seachdain (0-6, far a bheil 0 Didòmhnaich)

%m
Sònrachadh mìos dà-fhigearach (01-12)

%b
Giorrachadh ainm na mìos (apr, mar, …)

%B
Ainm làn mhìos

%y
Sònrachadh bliadhna dà-fhigearach

%Y
Ainmeachadh bliadhna ceithir-dhigitach

%j
Àireamh latha sa bhliadhna (001 - 366)

%U
Àireamh na seachdain sa bhliadhna (00 - 53), toiseach na seachdain Didòmhnaich

%W
Àireamh na seachdain sa bhliadhna (00 - 53), toiseach na seachdain Diluain

A rèir sin, is e “26 Sultain, 2019” ainm slàn na mìos, ceann-latha agus bliadhna. Faodar an cruth ceann-latha seo a mhìneachadh le bhith a’ cleachdadh ghnìomhaichean mar a leanas:"%B %d, %Y".

Càite:

  • %B - Ainm slàn na mìos
  • %d - Aireamh an latha sa mhìos
  • %Y - Ainmeachadh bliadhna ceithir-dhigitach

Nuair a bhios tu a’ toirt cunntas air cruth a’ chinn-latha, tha e cudromach gun cuir thu a-steach a h-uile caractar a bharrachd bhon t-sreang agad, leithid sgrìoban, cromagan, amannan, beàrnan is mar sin air adhart. Anns an eisimpleir agam, “Sultain 26, 2019”, tha cromag ann às deidh a’ cheann-latha, agus feumaidh tu cuideachd cromag a chuir anns an tuairisgeul cruth:"%B %d, %Y".

Tha suidheachaidhean ann nuair a gheibh thu ceann-latha nach eil a-mhàin a’ freagairt ri cruthan àbhaisteach (YYYY-MM-DD no BBBB/MM/DD), ach cuideachd ann an cànan a tha eadar-dhealaichte bhon fhear bunaiteach a chaidh a chuir a-steach air an t-siostam-obrachaidh agad. Mar eisimpleir, luchdaich thu sìos dàta far a bheil an ceann-latha air a chomharrachadh mar seo: “15 Dùbhlachd, 2019.” Mus tionndaidh thu an sreang seo gu ceann-latha, feumaidh tu an locale atharrachadh.

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

A’ toirt a-mach pàirtean cinn-latha ann am bun-bheachd R

Chan eil mòran ghnìomhan ann an R bunaiteach a leigeas leat pàirt sam bith de cheann-latha a thoirt a-mach à nì clas Ceann-là.

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

A bharrachd air a 'phrìomh chlas stuthan Ceann-là ann an R bunaiteach tha 2 sheòrsa dàta eile a bhios a’ stòradh stampa-ama: POSIXlt, POSIXct. Tha am prìomh eadar-dhealachadh eadar na clasaichean seo agus Ceann-là is e sin a bharrachd air a’ cheann-latha a bhios iad a’ stòradh ùine.

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

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

# "POSIXct" "POSIXt"

gnìomh Sys.time() a’ tilleadh an ceann-latha agus an uair làithreach san fhòrmat POSIXct. Tha an cruth seo coltach ri ciall UNIXTIME, agus a 'stòradh an àireamh de dhiog bho thoiseach linn UNIX (meadhan oidhche (UTC) bho 31 Dùbhlachd, 1969 gu 1 Faoilleach 1970).

Clas POSIXlt bidh e cuideachd a 'stòradh an ùine agus an ceann-latha, agus na pàirtean aca uile. Mar sin, is e rud a th 'ann le structar nas iom-fhillte, ach bhon a tha e furasta co-phàirt ceann-latha agus ùine sam bith fhaighinn air sgàth Leis an fhìrinn innse POSIXlt e liosta.

# Получаем текущую дату и время
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  # часовой пояс

Ag atharrachadh dàta àireamhach is teacsa gu cruthan POSIX* air a dhèanamh le gnìomhan as.POSIXct() и as.POSIXlt(). Tha seata beag argamaidean aig na gnìomhan sin.

  • x — Àireamh, sreang no nì clas Ceann-là, a dh'fheumas a thionndadh;
  • tz - Sòn ùine, "GMT" bunaiteach;
  • cruth — Tuairisgeul air cruth a’ chinn-latha anns a bheil an dàta a chaidh a chur gu argamaid x air a riochdachadh;
  • tùs - Air a chleachdadh a-mhàin nuair a thionndaidheas tu àireamh gu POSIX; feumaidh tu ceann-latha agus àm a chuir seachad bhon tèid na diogan a chunntadh san argamaid seo. Mar as trice air a chleachdadh airson eadar-theangachadh bho UNIXTIME.

Ma tha am fiosrachadh ceann-latha is uair agad a-staigh UNIXTIME, an uairsin gus an tionndadh gu ceann-latha soilleir, a ghabhas leughadh, cleachd an eisimpleir a leanas:

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

Aig tùs faodaidh tu stampa-ama sam bith a shònrachadh. Mar eisimpleir, ma tha an ceann-latha agus an uair anns an dàta agad mar an àireamh de dhiog bho 15 Sultain, 2019 12:15 f, an uairsin airson a thionndadh gu cleachdadh ceann-latha:

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

Ag obair le cinn-latha a’ cleachdadh a’ phacaid lubridate

lubridate Is dòcha gur e am pasgan as mòr-chòrdte airson a bhith ag obair le cinn-latha sa chànan R. Bheir e trì clasaichean a bharrachd dhut.

  • fad - fad, i.e. àireamh diogan eadar dà chlàr-ama;
  • amannan - leigidh amannan dhut àireamhachadh a dhèanamh eadar cinn-latha ann an amannan a ghabhas leughadh le daoine: làithean, mìosan, seachdainean, agus mar sin air adhart;
  • amannan - nithean a tha a 'toirt seachad an t-àite tòiseachaidh is crìochnachaidh ann an ùine.

Bithear a’ stàladh phasganan a bharrachd anns a’ chànan R a’ cleachdadh a’ ghnìomh àbhaisteach install.packages().

A 'stàladh a' phacaid lubridate:

install.packages("lubridate")

Tionndaidh teacsa gu latha le bhith a’ cleachdadh lubridate

Feartan pacaid lubridate gu mòr a dhèanamh nas sìmplidhe air a’ phròiseas airson teacsa a thionndadh gu ceann-latha, agus leigidh e leat gnìomhachd àireamhachd sam bith a dhèanamh le cinn-latha agus amannan.

Cuidichidh na gnìomhan thu gus an ceann-latha no an ceann-latha agus an uair làithreach fhaighinn today() и now().

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

Gus sreang a thionndadh gu ceann-latha a-steach lubridate Tha teaghlach iomlan de ghnìomhan ann le ainmean an-còmhnaidh air an dèanamh suas de thrì litrichean, agus a’ comharrachadh sreath nan co-phàirtean ceann-latha:

  • y - bliadhna
  • m - mìos
  • d - latha

Liosta de ghnìomhan airson teacsa atharrachadh gu ruige seo tro lubridate

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

Seo cuid de na h-eisimpleirean airson sreangan a thionndadh gu cinn-latha:

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

Mar a tha thu faicinn lubridate Tha e tòrr nas èifeachdaiche ann a bhith ag aithneachadh tuairisgeulan ceann-latha mar theacsa, agus leigidh e leat teacsa a thionndadh gu ceann-latha gun a bhith a’ cleachdadh gnìomhaichean a bharrachd gus cunntas a thoirt air a’ chruth.

A 'toirt a-mach co-phàirtean ceann-latha a' cleachdadh a 'phacaid lubridate

Cuideachd a 'cleachdadh lubridate gheibh thu pàirt sam bith bho cheann-latha:

dt <- ymd("2017 jan 21")

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

Gnìomhan àireamhachd le cinn-latha

Ach an gnìomh as cudromaiche agus bunaiteach lubridate a tha comasach air diofar obrachaidhean àireamhachd a dhèanamh le cinn-latha.

Tha cruinneachadh cinn-latha air a choileanadh le trì gnìomhan:

  • floor_date - a’ cruinneachadh chun an ama a dh’ fhalbh as fhaisge
  • ceiling_date - a 'dol chun an ama ri teachd faisg air làimh
  • round_date - a 'cruinneachadh chun na h-ùine as fhaisge

Tha argamaid aig gach aon de na gnìomhan sin aonada leigeas leat an aonad cruinneachaidh a shònrachadh: dàrna, mionaid, uair, latha, seachdain, mìos, dà mhìos, cairteal, ràithe, leth-bhliadhna, bliadhna

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") # округлить до полугодия

Mar sin feuch an obraich sinn a-mach mar a gheibh sinn ceann-latha a tha 8 latha às deidh a’ cheann-latha làithreach agus dèan diofar àireamhachadh àireamhachd eile eadar an dà cheann-latha.

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

Obair shìmplidh le amannan, pasgan ùine R.

timeperiodsR - pasgan ùr airson obrachadh le cinn-latha a chaidh fhoillseachadh air CRAN san t-Sultain 2019.

A 'stàladh a' phacaid timeperiodsR:

install.packages("timeperiodsR")

Is e am prìomh adhbhar ùine shònraichte a dhearbhadh gu sgiobalta an coimeas ri ceann-latha sònraichte. Mar eisimpleir, a 'cleachdadh a ghnìomhan faodaidh tu gu furasta:

  • Faigh an t-seachdain, mìos, cairteal no bliadhna a dh’ fhalbh ann an R.
  • Faigh àireamh shònraichte de amannan an coimeas ri ceann-latha, mar eisimpleir na 4 seachdainean a dh’ fhalbh.
  • Tha e furasta na co-phàirtean aige a thoirt a-mach às an ùine a thig às: an ceann-latha tòiseachaidh is crìochnachaidh, an àireamh de làithean a chaidh a ghabhail a-steach san eadar-ama, an sreath iomlan de chinn-latha a tha air a ghabhail a-steach ann.

Ainm gach gnìomh pacaid timeperiodsR tha iad intuitive agus tha dà phàirt ann: stiùireadh_eadar-ama, far a bheil:

  • stiùireadh anns am feum thu gluasad an coimeas ri ceann-latha ainmichte: last_n, roimhe, seo, an ath, next_n.
  • temporal eadar-ama gus an ùine obrachadh a-mach: latha, seachdain, mìos, cairteal, bliadhna.

Seata iomlan de dhleastanasan:

  • 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()

Uair ceart ann an raon ùine R

Tha na gnìomhan sin feumail ann an cùisean far am feum thu aithisgean a thogail stèidhichte air dàta bhon t-seachdain no a’ mhìos a chaidh seachad. Gus am mìos mu dheireadh fhaighinn, cleachd gnìomh an aon ainm previous_month():

prmonth <- previous_month()

Às deidh sin bidh nì agad prmonth clas tpr, às am faighear na co-phàirtean a leanas gu furasta:

  • ceann-latha tòiseachaidh na h-ùine, anns an eisimpleir againn is e seo am mìos mu dheireadh
  • ceann-latha crìochnachaidh ùine
  • an àireamh de làithean air an gabhail a-steach san ùine
  • sreath de chinn-latha air a ghabhail a-steach san ùine

A bharrachd air an sin, faodaidh tu gach aon de na pàirtean fhaighinn ann an diofar dhòighean:

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

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

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

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

Gheibh thu cuideachd gin de na pàirtean leis an argamaid pàirt, a tha an làthair anns gach aon de na gnìomhan pacaid. Luachan a dh’ fhaodadh a bhith ann: toiseach, deireadh, sreath, fad.

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

Mar sin leig dhuinn sùil a thoirt air na h-argamaidean gu lèir a tha rim faighinn anns na gnìomhan pacaid timeperiodsR:

  • x - An ceann-latha iomraidh bhon tèid an ùine a thomhas, an ceann-latha làithreach gu bunaiteach;
  • n - An àireamh de amannan a thèid a ghabhail a-steach san ùine, mar eisimpleir na 3 seachdainean roimhe;
  • part - Dè am pàirt den nì tpr feumaidh tu faighinn, gu bunaiteach all;
  • week_start - Chan eil an argamaid an làthair ach ann an gnìomhan airson a bhith ag obair le seachdainean, agus leigidh e leat an àireamh latha den t-seachdain a thèid a mheas mar thoiseach tòiseachaidh a shuidheachadh. Gu gnàthach, is e Diluain toiseach na seachdain, ach faodaidh tu gin a shuidheachadh bho 1 - Diluain gu 7 - Didòmhnaich.

Mar sin, faodaidh tu ùine ùine sam bith obrachadh a-mach an coimeas ris a’ cheann-latha làithreach no ceann-latha sam bith eile; seo beagan eisimpleirean eile:

# получить 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

Is e Didòmhnaich 6 Dàmhair:
Ag obair le cinn-latha ann an R (comasan bunaiteach, a bharrachd air na pasganan lubridate agus timeperiodsR)

Feumaidh sinn ùine, an coimeas ri 6 Dàmhair, a bheir na 3 seachdainean roimhe sin. Gun a bhith a’ toirt a-steach an t-seachdain a tha a’ toirt a-steach 6 Dàmhair fhèin. Mar sin, is e seo an ùine bho 9 Sultain gu 29 Sultain.

Ag obair le cinn-latha ann an R (comasan bunaiteach, a bharrachd air na pasganan lubridate agus 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

San eisimpleir seo, tha ùidh againn anns a’ mhìos a bha 4 mìosan air ais, ma thòisicheas sinn bho 16 Sultain, 2019, b’ e Cèitean 2019 a bh’ ann.

A’ sìoladh vectar cinn-latha a’ cleachdadh timeperiodsR

Gus cinn-latha a shìoladh a-steach timeperiodsR Tha grunn ghnìomhaichean ann:

  • %left_out% - a’ dèanamh coimeas eadar dà rud clas tpr, is a’ tilleadh an luach on fhear chlì a tha a dhìth san fhear cheart.
  • %left_in% - a’ dèanamh coimeas eadar dà rud sa chlas tpr, is a’ tilleadh nan cinn-latha bhon nì chlì a tha san fhear cheart.
  • %right_out% - a’ dèanamh coimeas eadar dà nì clas tpr, is a’ tilleadh an luach on fhear dheas a tha a dhìth on fhear chlì.
  • %right_in% - a’ dèanamh coimeas eadar dà rud sa chlas tpr, is a’ tilleadh cinn-latha bhon nì cheart a tha an làthair air an fhear chlì.

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

Aig a 'phacaid timeperiodsR tha tè oifigeil ann an cànan na Ruis YouTube liosta-chluiche a.

co-dhùnadh

Rinn sinn sgrùdadh mionaideach air na clasaichean de stuthan a tha air an dealbhadh sa chànan R airson obrachadh le cinn-latha. Cuideachd a-nis faodaidh tu gnìomhachd àireamhachd a dhèanamh air cinn-latha, agus amannan ùine sam bith fhaighinn gu sgiobalta a ’cleachdadh a’ phacaid timeperiodsR.

Ma tha ùidh agad anns a’ chànan R, tha mi a’ toirt cuireadh dhut fo-sgrìobhadh don t-sianal teileagram agam R4 margaidheachd, anns am bi mi a’ roinn stuthan feumail gach latha mu bhith a’ cleachdadh cànan R ann a bhith a’ fuasgladh do dhuilgheadasan làitheil.

Source: www.habr.com

Cuir beachd ann