Vinna með dagsetningar í R (grunngetu, sem og smurefni og tímatímabil R pakkana)

Fáðu núverandi dagsetningu á hvaða forritunarmáli sem er, aðgerð sem jafngildir "Halló heimur!" R tungumálið er engin undantekning.

Í þessari grein munum við skoða hvernig vinna með dagsetningar virkar í grunnsetningafræði R tungumálsins og einnig skoða nokkra gagnlega pakka sem auka möguleika þess þegar unnið er með dagsetningar:

  • lubridate — pakki sem gerir þér kleift að framkvæma útreikninga á milli dagsetninga;
  • timeperiodsR — pakki til að vinna með tímabil og íhluti þeirra.

Vinna með dagsetningar í R (grunngetu, sem og smurefni og tímatímabil R pakkana)

efni

Ef þú hefur áhuga á gagnagreiningu, og sérstaklega R tungumálinu, gætirðu haft áhuga á mínum símskeyti и YouTube rásir. Mest af efninu er tileinkað R tungumálinu.

  1. Vinna með dagsetningar í grunn R setningafræði
    1.1. Umbreyttu texta í dagsetningu
    1.2. Að draga út dagsetningarhluti í grunn R
  2. Unnið með dagsetningar með því að nota smurefnispakkann
    2.1. Umbreyttu texta í dagsetningu með því að nota lubridate
    2.2. Dragðu út dagsetningaríhluti með því að nota smurefnispakkann
    2.3. Reikniaðgerðir með dagsetningum
  3. Einfölduð vinna með tímabilum, tímabilumR pakka
    3.1. Tímabil í tímabilumR
    3.2. Sían á vektor dagsetningar með því að nota tímatímabilR
  4. Ályktun

Vinna með dagsetningar í grunn R setningafræði

Umbreyttu texta í dagsetningu

Basic R hefur sett af aðgerðum til að vinna með dagsetningar. Ókosturinn við grunnsetningafræði er að tilfelli fallheita og röksemda er mjög dreifð og hefur nánast engin rökfræðileg tengsl. Hins vegar þarftu að þekkja helstu aðgerðir tungumálsins, svo við byrjum á þeim.

Oftast þegar þú hleður gögnum inn í R, úr csv skrám eða öðrum heimildum færðu dagsetningu sem texta. Til að breyta þessum texta í rétta gagnategund, notaðu aðgerðina 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"

Sjálfgefið as.Date() samþykkir dagsetningu á tveimur sniðum: ÁÁÁÁ-MM-DD eða ÁÁÁÁ/MM/DD.
Ef gagnasettið þitt inniheldur dagsetningar á einhverju öðru sniði geturðu notað rökin format.

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

snið samþykkir rekstraraðila á strengjaformi sem táknar hvaða tímabil og snið þess; algengustu gildin eru sýnd í töflunni hér að neðan:

Snið
Lýsing

%d
Dagsnúmer í mánuði

%a
Skammstöfun á nafni vikudags

%A
Fullt nafn vikudags

%w
Númer vikudags (0-6, þar sem 0 er sunnudagur)

%m
Tveggja stafa mánaðarheiti (01-12)

%b
Skammstöfun á nafni mánaðar (apr., mars, …)

%B
Heilt mánaðar nafn

%y
Tveggja stafa ártal tilnefningar

%Y
Fjögurra stafa árstilnefning

%j
Dagsnúmer ársins (001 - 366)

%U
Fjöldi viku ársins (00 - 53), byrjun vikunnar sunnudag

%W
Vikunúmer á árinu (00 - 53), byrjun vikunnar mánudagur

Samkvæmt því er „26. september 2019“ fullt nafn mánaðar, dagsetning og ár. Þessu dagsetningarsniði er hægt að lýsa með því að nota rekstraraðila sem hér segir:"%B %d, %Y".

Hvar:

  • %B — Fullt nafn mánaðarins
  • %d — Númer dags í mánuðinum
  • %Y — Fjögurra stafa ártal

Þegar þú lýsir dagsetningarsniðinu er mikilvægt að hafa alla viðbótarstafi úr strengnum þínum, eins og strik, kommur, punktar, bil og svo framvegis. Í dæminu mínu, "26. september 2019", er kommu á eftir dagsetningunni og þú þarft líka að setja kommu í sniðlýsinguna:"%B %d, %Y".

Það eru aðstæður þegar þú færð dagsetningu sem samsvarar ekki aðeins venjulegu sniði (ÁÁÁÁ-MM-DD eða ÁÁÁÁ/MM/DD), en einnig á tungumáli sem er frábrugðið því sjálfgefna sem er uppsett á stýrikerfinu þínu. Til dæmis halaðir þú niður gögnum þar sem dagsetningin er tilgreind svona: „15. desember 2019.“ Áður en þú breytir þessum streng í dagsetningu þarftu að breyta staðsetningu.

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

Að draga út dagsetningarhluti í grunn R

Það eru ekki margar aðgerðir í basic R sem gera þér kleift að draga hvaða hluta dagsetningar sem er úr bekkjarhlut Dagsetning.

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

Til viðbótar við aðalhlutaflokkinn Dagsetning í basic R eru 2 fleiri gagnategundir sem geyma tímastimpil: POSIXlt, POSIXct. Helsti munurinn á þessum flokkum og Dagsetning er að til viðbótar við dagsetninguna sem þeir geyma tíma.

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

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

# "POSIXct" "POSIXt"

Virka Sys.time() skilar núverandi dagsetningu og tíma á sniði POSIXct. Þetta snið er svipað að merkingu og UNIXTIME, og geymir fjölda sekúndna frá upphafi UNIX tímabilsins (miðnætti (UTC) frá 31. desember 1969 til 1. janúar 1970).

Class POSIXlt það geymir einnig tíma og dagsetningu, og alla hluti þeirra. Þess vegna er þetta hlutur með flóknari uppbyggingu, en það er auðvelt að fá hvaða dagsetningar- og tímahluta sem er vegna þess að reyndar POSIXlt это lista.

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

Umbreytir tölulegum og textagögnum í snið POSIX* framkvæmt af aðgerðum as.POSIXct() и as.POSIXlt(). Þessar aðgerðir hafa lítið safn af rökum.

  • x — Tala, strengur eða flokkshlutur Dagsetning, sem þarf að breyta;
  • tz — Tímabelti, sjálfgefið „GMT“;
  • snið — Lýsing á dagsetningarsniðinu þar sem gögnin sem send eru til x viðfangsefnisins eru táknuð;
  • Uppruni — Aðeins notað þegar tölu er breytt í POSIX; þú verður að senda dagsetningarhlut og tíma sem sekúndurnar eru taldar frá til þessarar röksemdar. Venjulega notað fyrir þýðingar frá UNIXTIME.

Ef upplýsingar þínar um dagsetningu og tíma eru í UNIXTIME, til að breyta þeim í skýra, læsilega dagsetningu, notaðu eftirfarandi dæmi:

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

Í uppruna geturðu tilgreint hvaða tímastimpil sem er. Til dæmis, ef gögnin þín innihalda dagsetningu og tíma sem fjölda sekúndna síðan 15. september 2019 kl. 12:15, þá til að breyta þeim í dagsetningu skaltu nota:

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

Unnið með dagsetningar með því að nota smurefnispakkann

lubridate Kannski vinsælasti pakkinn til að vinna með dagsetningar á tungumáli R. Hann veitir þér þrjá viðbótartíma.

  • durations — lengd, þ.e. fjöldi sekúndna á milli tveggja tímastimpla;
  • tímabil - tímabil gera þér kleift að reikna út á milli dagsetninga með mönnum læsanlegu millibili: dögum, mánuðum, vikum og svo framvegis;
  • millibili - hlutir sem gefa upphafs- og endapunkt í tíma.

Uppsetning viðbótarpakka á R tungumálinu fer fram með því að nota staðlaða aðgerðina install.packages().

Að setja upp pakkann lubridate:

install.packages("lubridate")

Umbreyttu texta í dagsetningu með því að nota lubridate

Eiginleikar pakkans lubridate einfaldaðu verulega ferlið við að umbreyta texta í dagsetningu og gerir þér einnig kleift að framkvæma allar reikniaðgerðir með dagsetningum og tímum.

Aðgerðirnar hjálpa þér að fá núverandi dagsetningu eða dagsetningu og tíma today() и now().

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

Til að breyta streng í dagsetningu í lubridate Það er heil fjölskylda af föllum þar sem nöfnin samanstanda alltaf af þremur stöfum og gefa til kynna röð dagsetningarþátta:

  • y - ár
  • m - mánuði
  • d - dagur

Listi yfir aðgerðir til að breyta texta í dagsetningu með smurningu

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

Nokkur dæmi til að breyta strengjum í dagsetningar:

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

Eins og þú sérð lubridate Það er mun skilvirkara við að þekkja dagsetningarlýsingar sem texta og gerir þér kleift að breyta texta í dagsetningu án þess að nota fleiri rekstraraðila til að lýsa sniðinu.

Dragðu út dagsetningaríhluti með því að nota smurefnispakkann

Einnig að nota lubridate þú getur fengið hvaða hluti sem er frá dagsetningu:

dt <- ymd("2017 jan 21")

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

Reikniaðgerðir með dagsetningum

En mikilvægasta og undirstöðu virkni lubridate er hæfileikinn til að framkvæma ýmsar reikniaðgerðir með dagsetningum.

Dagsetning námundun er framkvæmd með þremur aðgerðum:

  • floor_date — námundun að næstu þátíð
  • ceiling_date — námundun að náinni framtíðartíma
  • round_date - námundun að næsta tíma

Hver þessara aðgerða hefur rök einingsem gerir þér kleift að tilgreina námundunareininguna: sekúndu, mínútu, klukkustund, dagur, viku, mánuður, tveggja mánaða, ársfjórðungur, árstíð, hálft ár, ár

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

Svo skulum reikna út hvernig á að fá dagsetningu sem er 8 dögum eftir núverandi dagsetningu og gera ýmsa aðra reikninga útreikninga á milli dagsetninganna tveggja.

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

Einfölduð vinna með tímabilum, tímabilumR pakka.

timeperiodsR — nýr pakki til að vinna með dagsetningar sem var gefinn út á CRAN í september 2019.

Að setja upp pakkann timeperiodsR:

install.packages("timeperiodsR")

Megintilgangurinn er að ákvarða fljótt ákveðið tímabil miðað við tiltekna dagsetningu. Til dæmis, með því að nota aðgerðir þess geturðu auðveldlega:

  • Fáðu síðustu viku, mánuð, ársfjórðung eða ár í R.
  • Fáðu tiltekinn fjölda tímabila miðað við dagsetningu, til dæmis síðustu 4 vikur.
  • Auðvelt er að draga hluti þess úr tímabilinu sem myndast: upphafs- og lokadagsetning, fjöldi daga sem eru innifaldir í bilinu, alla röð dagsetninga sem eru innifalin í því.

Heiti allra pakkaaðgerða timeperiodsR eru leiðandi og samanstanda af tveimur hlutum: átt_bilhvar:

  • átt þar sem þú þarft að færa þig miðað við tiltekna dagsetningu: síðasta_n, fyrra, þetta, næsta, næsta_n.
  • tímabundið bil til að reikna út tímabilið: dagur, vika, mánuður, ársfjórðungur, ár.

Fullt eiginleikasett:

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

Tímabil í tímabilumR

Þessar aðgerðir eru gagnlegar í þeim tilvikum þar sem þú þarft að búa til skýrslur byggðar á gögnum frá síðustu viku eða mánuði. Til að fá síðasta mánuð, notaðu aðgerðina með sama nafni previous_month():

prmonth <- previous_month()

Eftir það munt þú hafa hlut pr mánuði bekknum tpr, þar sem auðvelt er að fá eftirfarandi íhluti:

  • upphafsdagsetning tímabilsins, í okkar dæmi er þetta síðasti mánuðurinn
  • lokadagsetning tímabils
  • fjöldi daga innifalinn í tímabilinu
  • röð dagsetninga innifalin í tímabilinu

Þar að auki geturðu fengið hvern íhlutina á mismunandi vegu:

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

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

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

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

Þú getur líka fengið hvaða hluti sem er með því að nota rökin hluti, sem er til staðar í hverri pakkaaðgerðum. Möguleg gildi: byrjun, endir, röð, lengd.

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

Svo skulum við skoða öll rökin sem eru tiltæk í pakkaaðgerðunum timeperiodsR:

  • x — Viðmiðunardagsetningin sem tímabilið verður reiknað frá, núverandi dagsetning sjálfgefið;
  • n — Fjöldi millibila sem verða teknir með á tímabilinu, til dæmis síðustu 3 vikurnar;
  • part — Hvaða hluti hlutarins tpr þú þarft að fá, sjálfgefið all;
  • week_start — Röksemdin er aðeins til staðar í föllum til að vinna með vikur, og gerir þér kleift að stilla númer vikudagsins sem verður talinn upphaf hennar. Sjálfgefið er að byrjun vikunnar er mánudagur, en þú getur stillt hvaða viku sem er frá kl. 1 - mánudaga til 7 - sunnudaga.

Þannig geturðu reiknað út hvaða tímabil sem er miðað við núverandi eða hvaða dagsetningu sem er; hér eru nokkur fleiri dæmi:

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

6. október er sunnudagur:
Vinna með dagsetningar í R (grunngetu, sem og smurefni og tímatímabil R pakkana)

Við þurfum tímabil sem, miðað við 6. október, mun taka 3 vikurnar á undan. Ekki meðtalin vikuna sem inniheldur sjálfan 6. október. Samkvæmt því er þetta tímabilið frá 9. september til 29. september.

Vinna með dagsetningar í R (grunngetu, sem og smurefni og tímatímabil R pakkana)

# получить месяц отстающий на 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

Í þessu dæmi höfum við áhuga á mánuðinum sem var fyrir 4 mánuðum síðan, ef við byrjum frá 16. september 2019, þá var það maí 2019.

Sían á vektor dagsetningar með því að nota tímatímabilR

Til að sía dagsetningar inn timeperiodsR Það eru nokkrir rekstraraðilar:

  • %left_out% - ber saman tvo tpr flokka hluti og skilar gildinu frá þeim vinstri sem vantar í þann hægri.
  • %left_in% - ber saman tvo hluti af tpr-flokknum og skilar dagsetningum frá vinstri hlutnum sem eru með í þeim hægri.
  • %right_out% - ber saman tvo tpr flokka hluti og skilar gildinu frá þeim hægri sem vantar í þann vinstri.
  • %right_in% - ber saman tvo hluti af tpr-flokknum og skilar dagsetningum frá hægri hlutnum sem eru til staðar í þeim vinstri.

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

Við pakkann timeperiodsR það er opinbert, á rússnesku YouTube lagalisti.

Ályktun

Við skoðuðum ítarlega flokka hluta sem eru hannaðir á R tungumálinu til að vinna með dagsetningar. Nú geturðu líka framkvæmt reikniaðgerðir á dagsetningum og fengið fljótt hvaða tímabil sem er með því að nota pakkann timeperiodsR.

Ef þú hefur áhuga á R tungumálinu býð ég þér að gerast áskrifandi að símskeyti rásinni minni R4markaðssetning, þar sem ég deili gagnlegu efni daglega um notkun R tungumálsins til að leysa dagleg vandamál þín.

Heimild: www.habr.com

Bæta við athugasemd