ProHoster > Blag > Riarachán > Ag obair le dátaí in R (cumais bhunúsacha, chomh maith leis na pacáistí lubridate agus timeperiodsR)
Ag obair le dátaí in R (cumais bhunúsacha, chomh maith leis na pacáistí lubridate agus timeperiodsR)
Faigh an dáta reatha in aon teanga cláir, oibríocht atá comhionann le "Dia duit ar domhan!" Ní haon eisceacht í an teanga R.
San Airteagal seo, féachfaimid ar conas a oibríonn oibriú le dátaí i gcomhréir bhunúsach na teanga R, agus féachfaimid freisin ar roinnt pacáistí úsáideacha a leathnaíonn a chumais agus iad ag obair le dátaí:
lubridate — pacáiste a ligeann duit ríomhaireachtaí uimhríochta a dhéanamh idir dátaí;
timeperiodsR — pacáiste chun oibriú le tréimhsí ama agus a gcomhpháirteanna.
Ábhar
Má tá suim agat in anailís sonraí, agus go háirithe sa teanga R, b’fhéidir go mbeadh suim agat i mo chuid teileagram и youtube cainéil. Tá an chuid is mó den ábhar tiomnaithe don teanga R.
Tá sraith feidhmeanna ag Basic R chun oibriú le dátaí. Is é an míbhuntáiste a bhaineann leis an gcomhréir bhunúsach ná go bhfuil cás ainmneacha feidhm agus argóintí an-scaipthe agus nach bhfuil aon bhaint loighciúil aige go praiticiúil. Mar sin féin, ní mór duit fios a bheith agat ar fheidhmeanna bunúsacha na teanga, mar sin cuirfimid tús leo.
Go minic nuair a bhíonn sonraí á luchtú isteach i R, ó chomhaid csv, nó ó fhoinsí eile, faigheann tú dáta mar théacs. Chun an téacs seo a thiontú go dtí an cineál sonraí ceart, úsáid an fheidhm 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"
De réir réamhshocraithe as.Date() glacann sé le dáta i dhá fhormáid: BBBB-MM-LL nó BBBB/MM/LL.
Má tá dátaí i bhformáid éigin eile ar do thacar sonraí, is féidir leat an argóint a úsáid format.
as.Date("September 26, 2019", format = "%B %d, %Y")
leagan glacann sé le hoibreoirí i bhfoirm teaghrán ag sonrú aon eatramh ama agus a bhformáid; taispeántar na luachanna is coitianta a úsáidtear sa tábla thíos:
Formáid
Cur síos
%d
Uimhir lae i mí
%a
Giorrúchán le haghaidh ainm an lae den tseachtain
%A
Ainm iomlán an lae den tseachtain
%w
Líon lá na seachtaine (0-6, áit arb é 0 an Domhnach)
%m
Ainmniú míosa dhá dhigit (01-12)
%b
Giorrúchán ar ainm na míosa (apr, mar, …)
%B
Ainm na míosa iomlán
%y
Ainmniú bliana dhá dhigit
%Y
Ainmniú bliana ceithre dhigit
%j
Uimhir lae sa bhliain (001 - 366)
%U
Líon na seachtaine sa bhliain (00 - 53), tús na seachtaine Dé Domhnaigh
%W
Uimhir na seachtaine sa bhliain (00 - 53), tús na seachtaine Dé Luain
Dá réir sin, is é “26 Meán Fómhair, 2019” ainm iomlán na míosa, an dáta agus na bliana. Is féidir cur síos a dhéanamh ar fhormáid an dáta seo agus oibreoirí á n-úsáid mar seo a leanas:"%B %d, %Y".
I gcás:
%B — Ainm iomlán na míosa
%d — Líon an lae sa mhí
%Y — Ainmniú ceithre dhigit bliana
Agus formáid an dáta á chur síos, tá sé tábhachtach gach carachtar breise ó do theaghrán a chur san áireamh, mar shampla dashes, camóga, tréimhsí, spásanna, agus mar sin de. I mo shampla, “26 Meán Fómhair, 2019”, tá camóg tar éis an dáta, agus caithfidh tú camóg a chur sa chur síos formáide freisin:"%B %d, %Y".
Bíonn cásanna ann nuair a fhaigheann tú dáta ní hamháin nach bhfreagraíonn do na formáidí caighdeánacha (BBBB-MM-DD nó BBBB/MM/LL), ach freisin i dteanga atá difriúil ón gceann réamhshocraithe atá suiteáilte ar do chóras oibriúcháin. Mar shampla, d’íoslódáil tú sonraí ina bhfuil an dáta sonraithe mar seo: “15 Nollaig, 2019.” Sula ndéanann tú an teaghrán seo a thiontú go dáta, ní mór duit an locale a athrú.
# Меняем локаль
Sys.setlocale("LC_TIME", "Russian")
# Конвертируем строку в дату
as.Date("Декабрь 15, 2019 г.", format = "%B %d, %Y")
Comhpháirteanna dáta a bhaint sa bhun R
Níl go leor feidhmeanna i R bhunúsach a ligeann duit aon chuid de dháta a bhaint as réad ranga dáta.
current_date <- Sys.Date() # текущая дата
weekdays(current_date) # получить номер дня недели
months(current_date) # получить номер месяца в году
quarters(current_date) # получить номер квартала в году
Chomh maith leis an rang réad is mó dáta sa bhun-R tá 2 chineál sonraí eile a stórálann stampa ama: POSIXlt, POSIXct. An phríomhdhifríocht idir na ranganna seo agus dáta is é sin sa bhreis ar an dáta a stórálann siad am.
# получить текущую дату и время
current_time <- Sys.time()
# узнать класс объекта current_time
class(current_time)
# "POSIXct" "POSIXt"
Feidhm Sys.time() tuairisceáin an dáta agus an t-am reatha san fhormáid POSIXct. Tá an fhormáid seo cosúil le UNIXTIME, agus stórálann sé líon na soicind ó thús ré UNIX (meán oíche (UTC) ó 31 Nollaig, 1969 go 1 Eanáir, 1970).
Rang POSIXlt stórálann sé freisin an t-am agus an dáta, agus a gcomhpháirteanna go léir. Dá bhrí sin, is rud é le struchtúr níos casta, ach as a bhfuil sé éasca aon chomhpháirt dáta agus ama a fháil mar gheall ar go deimhin POSIXlt seo 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 # часовой пояс
Sonraí uimhriúla agus téacs a thiontú go formáidí POSIX* arna chur i gcrích ag feidhmeanna as.POSIXct() и as.POSIXlt(). Tá sraith bheag argóintí ag na feidhmeanna seo.
x — Uimhir, sreangán nó réad ranga dáta, a chaithfear a thiontú;
tz - Crios ama, "GMT" réamhshocraithe;
formáid — Cur síos ar an bhformáid dáta ina léirítear na sonraí a cuireadh ar aghaidh chuig an argóint x;
bunús — Ní úsáidtear é ach nuair a bhíonn uimhir á thiontú go POSIX; ní mór duit réad dáta agus am óna ndéantar na soicindí a chomhaireamh don argóint seo a chur isteach. De ghnáth úsáidtear é le haghaidh aistriúcháin ó UNIXTIME.
Má tá do chuid faisnéise dáta agus ama istigh UNIXTIME, ansin chun iad a thiontú go dáta soiléir inléite, bain úsáid as an sampla seo a leanas:
# Конвертируем UNIXTIME в читаемую дату
as.POSIXlt(1570084639, origin = "1970-01-01")
I dtionscnamh is féidir leat aon stampa ama a shonrú. Mar shampla, má tá an dáta agus an t-am mar líon na soicind ó 15 Meán Fómhair 2019 12:15 pm i do shonraí, ansin é a thiontú go dáta úsáide:
# Конвертируем UNIXTIME в дату учитывая что начало отсчёта 15 сентября 2019 12:15
as.POSIXlt(1546123, origin = "2019-09-15 12:15:00")
Ag obair le dátaí ag baint úsáide as an bpacáiste lubridate
lubridate B'fhéidir gurb é an pacáiste is mó tóir le haghaidh oibriú le dátaí sa teanga R. Soláthraíonn sé trí rang breise duit.
faid — ré, i.e. líon na soicind idir dhá stampa ama;
tréimhsí - ceadaíonn tréimhsí duit ríomhaireachtaí a dhéanamh idir dátaí i dtréimhsí inléite daonna: laethanta, míonna, seachtainí, agus mar sin de;
eatraimh - rudaí a sholáthraíonn an pointe tosaigh agus an pointe deiridh in am.
Déantar pacáistí breise a shuiteáil sa teanga R ag baint úsáide as an bhfeidhm chaighdeánach install.packages().
Suiteáil an phacáiste lubridate:
install.packages("lubridate")
Téacs a thiontú go dáta ag baint úsáide as lubridate
Gnéithe pacáiste lubridate an próiseas a shimpliú go suntasach chun téacs a thiontú go dáta, agus freisin cead a thabhairt duit aon oibríochtaí uimhríochta a dhéanamh le dátaí agus amanna.
Cabhróidh na feidhmeanna leat an dáta nó an dáta agus an t-am reatha a fháil today() и now().
today() # текущая дата
now() # текущая дата и время
Chun teaghrán a thiontú go dáta i lubridate Tá teaghlach iomlán feidhmeanna ann a mbíonn a n-ainmneacha i gcónaí comhdhéanta de thrí litir, agus a léiríonn seicheamh na gcomhpháirteanna dáta:
y - bliain
m - mí
d - lá
Liosta feidhmeanna chun téacs a thiontú go dáta trí lubridate
ymd()
ydm()
mdy()
myd()
dmy()
dym()
yq()
Roinnt samplaí chun teaghráin a thiontú go dátaí:
ymd("2017 jan 21")
mdy("March 20th, 2019")
dmy("1st april of 2018")
Mar is féidir leat a fheiceáil lubridate Tá sé i bhfad níos éifeachtaí tuairiscí dáta a aithint mar théacs, agus ligeann sé duit téacs a thiontú go dáta gan úsáid a bhaint as oibreoirí breise chun cur síos a dhéanamh ar an bhformáid.
Comhpháirteanna dáta a bhaint as an bpacáiste lubridate
Chomh maith leis sin ag baint úsáide as lubridate is féidir leat comhpháirt ar bith a fháil ó dháta:
dt <- ymd("2017 jan 21")
year(dt) # год
month(dt) # месяц
mday(dt) # день в месяце
yday(dt) # день в году
wday(dt) # день недели
Oibríochtaí uimhríochta le dátaí
Ach an fheidhmiúlacht is tábhachtaí agus bunúsacha lubridate an cumas oibríochtaí uimhríochta éagsúla a dhéanamh le dátaí.
Comhlíonann trí fheidhm an slánú dáta:
floor_date — slánú go dtí an aimsir chaite is gaire
ceiling_date — slánú go dtí an aimsir luath amach anseo
round_date - slánú go dtí an t-am is gaire
Tá argóint ag gach ceann de na feidhmeanna seo aonada cheadaíonn duit an t-aonad slánúcháin a shonrú: dara, nóiméad, uair, lá, seachtain, mí, démhí, ceathrú, séasúr, leathbhliain, bliain
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 déanaimis amach conas dáta atá 8 lá tar éis an dáta reatha a fháil agus ríomhanna uimhríochta éagsúla eile a dhéanamh idir an dá dháta.
today() + days(8) # какая дата будет через 8 дней
today() - months(2) # какая дата была 2 месяца назад
today() + weeks(12) # какая дата будет через 12 недель
today() - years(2) # какая дата была 2 года назад
Obair shimplithe le tréimhsí, pacáiste timeperiodsR.
timeperiodsR — pacáiste nua chun oibriú le dátaí a foilsíodh ar CRAN i Meán Fómhair 2019.
Suiteáil an phacáiste timeperiodsR:
install.packages("timeperiodsR")
Is é an príomhchuspóir ná eatramh ama áirithe a chinneadh go tapa i gcoibhneas le dáta áirithe. Mar shampla, ag baint úsáide as a fheidhmeanna is féidir leat go héasca:
Faigh an tseachtain, an mhí, an ceathrú cuid nó an bhliain seo caite in R.
Faigh líon sonraithe eatraimh ama i gcoibhneas le dáta, mar shampla na 4 seachtaine seo caite.
Tá sé éasca a chuid comhpháirteanna a bhaint as an eatramh ama a bhíonn mar thoradh air: an dáta tosaigh agus an dáta deiridh, líon na laethanta a chuimsítear san eatramh, seicheamh iomlán na dátaí atá san áireamh ann.
Ainm na bhfeidhmeanna pacáiste go léir timeperiodsR atá iomasach agus comhdhéanta de dhá chuid: treo_eatramháit:
treo ina gcaithfidh tú bogadh i gcoibhneas le dáta tugtha: last_n, roimhe seo, seo, seo chugainn, next_n.
ama eatramh chun an tréimhse a ríomh: lá, seachtain, mí, ceathrú, bliain.
Sraith iomlán feidhmeanna:
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()
Eatraimh ama i dtréimhsí amaR
Tá na feidhmeanna seo úsáideach i gcásanna inar gá duit tuarascálacha a thógáil bunaithe ar shonraí ón tseachtain nó ón mí seo caite. Chun an mhí seo caite a fháil, bain úsáid as an fheidhm den ainm céanna previous_month():
prmonth <- previous_month()
Tar éis a bheidh tú ag réad prmonth rang tpr, ónar féidir na comhpháirteanna seo a leanas a fháil go héasca:
dáta tosaigh na tréimhse, inár sampla is é seo an mhí seo caite
dáta deiridh na tréimhse
líon na laethanta atá san áireamh sa tréimhse
seicheamh dátaí atá san áireamh sa tréimhse
Ina theannta sin, is féidir leat gach ceann de na comhpháirteanna a fháil ar bhealaí éagsúla:
# первый день периода
prmonth$start
start(prmonth)
# последний день периода
prmonth$end
end(prmonth)
# последовательность дат
prmonth$sequence
seq(prmonth)
# количество дней входящих в период
prmonth$length
length(prmonth)
Is féidir leat freisin aon cheann de na comhpháirteanna a úsáid leis an argóint chuid, atá i láthair i ngach ceann de na feidhmeanna pacáiste. Luachanna féideartha: tús, deireadh, seicheamh, fad.
previous_month(part = "start") # начало периода
previous_month(part = "end") # конец периода
previous_month(part = "sequence") # последовательность дат
previous_month(part = "length") # количество дней в периоде
Mar sin déanaimis féachaint ar na hargóintí go léir atá ar fáil sna feidhmeanna pacáiste timeperiodsR:
x — An dáta tagartha óna ríomhfar an tréimhse ama, an dáta reatha réamhshocraithe;
n — Líon na dtréimhsí a áireofar sa tréimhse, mar shampla na 3 seachtaine roimhe sin;
part — Cén chomhpháirt den réad tpr ní mór duit a fháil, de réir réamhshocraithe all;
week_start — Níl an argóint i láthair ach amháin i bhfeidhmeanna le haghaidh oibriú le seachtainí, agus ceadaíonn sé duit a shocrú ar an líon de lá na seachtaine a mheasfar a bheith ina thús. De réir réamhshocraithe, is é an Luan tús na seachtaine, ach is féidir leat a shocrú ar bith ó 1 - Luan go 7 - Domhnach.
Mar sin, is féidir leat aon tréimhse ama a ríomh i gcoibhneas leis an dáta reatha nó dáta tugtha ar bith eile; seo roinnt samplaí 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 é 6 Deireadh Fómhair Dé Domhnaigh:
Teastaíonn tréimhse uainn a thógfaidh na 6 seachtaine roimhe sin, i gcomparáid leis an 3 Deireadh Fómhair. Gan an tseachtain a chuimsíonn 6 Deireadh Fómhair féin a áireamh. Dá réir sin, is é seo an tréimhse ó 9 Meán Fómhair go 29 Meán Fómhair.
# получить месяц отстающий на 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
Sa sampla seo, tá suim againn sa mhí a bhí 4 mhí ó shin, má thosaímid ó 16 Meán Fómhair, 2019, ansin ba é Bealtaine 2019 a bhí ann.
Veicteoir dátaí a scagadh ag baint úsáide as timeperiodsR
Chun dátaí a scagadh isteach timeperiodsR Tá roinnt oibreoirí ann:
%left_out% - déanann sé comparáid idir dhá réad aicme tpr, agus seolann sé an luach ar ais ón gceann clé atá ar iarraidh sa cheann cheart.
%left_in% - déanann sé comparáid idir dhá réad den aicme tpr, agus cuireann sé ar ais na dátaí ón oibiacht chlé atá san áireamh sa cheann ceart.
% right_out% - déanann sé comparáid idir dhá oibiacht aicme tpr, agus cuireann sé ar ais an luach ón gceann ceart atá ar iarraidh ón gceann clé.
% right_in% - déanann sé comparáid idir dhá réad den aicme tpr, agus filleann sé dátaí ón oibiacht cheart atá sa cheann ar 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
Ag an bpacáiste timeperiodsR tá ceann oifigiúil Rúisise ann Seinmliosta YouTube.
Conclúid
Rinneamar mionscrúdú ar na haicmí réad atá deartha sa teanga R chun oibriú le dátaí. Chomh maith leis sin anois is féidir leat a dhéanamh oibríochtaí uimhríochtúil ar dhátaí, agus go tapa a fháil ar aon tréimhsí ama ag baint úsáide as an bpacáiste timeperiodsR.
Má tá suim agat sa teanga R, tugaim cuireadh duit síntiús a íoc le mo chainéal teileagram R4mhargaíocht, ina roinnim ábhair úsáideacha go laethúil faoi úsáid na teanga R chun d’fhadhbanna laethúla a réiteach.