ProHoster > Blog > Rianachd > Ag obair le cinn-latha ann an R (comasan bunaiteach, a bharrachd air na pasganan lubridate agus timeperiodsR)
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.
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.
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.
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:
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.
# получить месяц отстающий на 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
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.