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.

Ag obair le dátaí in R (cumais bhunúsacha, chomh maith leis na pacáistí lubridate agus timeperiodsR)

Á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.

  1. Ag obair le dátaí sa bhunchomhréir R
    1.1. Téacs a thiontú go dáta
    1.2. Comhpháirteanna dáta a bhaint sa bhun R
  2. Ag obair le dátaí ag baint úsáide as an bpacáiste lubridate
    2.1. Téacs a thiontú go dáta ag baint úsáide as lubridate
    2.2. Comhpháirteanna dáta a bhaint as an bpacáiste lubridate
    2.3. Oibríochtaí uimhríochta le dátaí
  3. Obair shimplithe le tréimhsí, pacáiste timeperiodsR
    3.1. Eatraimh ama i dtréimhsí amaR
    3.2. Veicteoir dátaí a scagadh ag baint úsáide as timeperiodsR
  4. Conclúid

Ag obair le dátaí sa bhunchomhréir R

Téacs a thiontú go dáta

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-LLBBBB/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:
Ag obair le dátaí in R (cumais bhunúsacha, chomh maith leis na pacáistí lubridate agus timeperiodsR)

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.

Ag obair le dátaí in R (cumais bhunúsacha, chomh maith leis na pacáistí 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

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.

Foinse: will.com

Add a comment