Kufanya kazi na tarehe katika R (uwezo wa kimsingi, na vile vile vifurushi vya lubridate na timeperiodsR)

Pata tarehe ya sasa katika lugha yoyote ya programu, operesheni sawa na "Hujambo ulimwengu!" Lugha ya R sio ubaguzi.

Katika nakala hii, tutaangalia jinsi kufanya kazi na tarehe hufanya kazi katika syntax ya msingi ya lugha ya R, na pia angalia vifurushi kadhaa muhimu ambavyo vinapanua uwezo wake wakati wa kufanya kazi na tarehe:

  • lubridate - mfuko unaokuwezesha kufanya mahesabu ya hesabu kati ya tarehe;
  • timeperiodsR - kifurushi cha kufanya kazi na vipindi vya wakati na vifaa vyao.

Kufanya kazi na tarehe katika R (uwezo wa kimsingi, na vile vile vifurushi vya lubridate na timeperiodsR)

yaliyomo

Ikiwa una nia ya uchanganuzi wa data, na haswa lugha ya R, unaweza kupendezwa na my telegram и youtube njia. Maudhui mengi yamejitolea kwa lugha ya R.

  1. Kufanya kazi na tarehe katika syntax ya msingi ya R
    1.1. Badilisha maandishi kuwa tarehe
    1.2. Kuchimbua vipengele vya tarehe katika msingi R
  2. Kufanya kazi na tarehe kwa kutumia kifurushi cha lubridate
    2.1. Badilisha maandishi kuwa tarehe kwa kutumia lubridate
    2.2. Kuchimba vipengele vya tarehe kwa kutumia kifurushi cha lubridate
    2.3. Uendeshaji wa hesabu na tarehe
  3. Kazi iliyorahisishwa na vipindi, kifurushi cha timeperiodsR
    3.1. Vipindi vya muda katika vipindi vya wakatiR
    3.2. Kuchuja vekta ya tarehe kwa kutumia timeperiodsR
  4. Hitimisho

Kufanya kazi na tarehe katika syntax ya msingi ya R

Badilisha maandishi kuwa tarehe

Msingi R ina seti ya kazi za kufanya kazi na tarehe. Ubaya wa sintaksia ya msingi ni kwamba kesi ya majina ya kazi na hoja imetawanyika sana na haina muunganisho wowote wa kimantiki. Walakini, unahitaji kujua kazi za kimsingi za lugha, kwa hivyo tutaanza nazo.

Mara nyingi unapopakia data katika R, kutoka kwa faili za csv, au vyanzo vingine, unapokea tarehe kama maandishi. Ili kubadilisha maandishi haya kwa aina sahihi ya data, tumia chaguo la kukokotoa 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"

By default as.Date() inakubali tarehe katika fomati mbili: YYYY-MM-DD au YYYY/MM/DD.
Ikiwa seti yako ya data ina tarehe katika umbizo lingine, unaweza kutumia hoja format.

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

format inakubali waendeshaji katika umbo la mfuatano unaoashiria muda wowote wa muda na umbizo lake; thamani zinazotumika zaidi zinaonyeshwa kwenye jedwali hapa chini:

Fomati
Description

%d
Nambari ya siku katika mwezi

%a
Ufupisho wa jina la siku ya juma

%A
Jina kamili la siku ya juma

%w
Idadi ya siku ya juma (0-6, ambapo 0 ni Jumapili)

%m
Majina ya mwezi yenye tarakimu mbili (01-12)

%b
Ufupisho wa jina la mwezi (apr, mar, …)

%B
Jina kamili la mwezi

%y
Uteuzi wa miaka ya tarakimu mbili

%Y
Uteuzi wa miaka ya tarakimu nne

%j
Nambari ya siku katika mwaka (001 - 366)

%U
Idadi ya juma katika mwaka (00 - 53), mwanzo wa juma Jumapili

%W
Nambari ya wiki katika mwaka (00 - 53), mwanzo wa wiki Jumatatu

Ipasavyo, "Septemba 26, 2019" ndio jina kamili la mwezi, tarehe na mwaka. Umbizo hili la tarehe linaweza kuelezewa kwa kutumia waendeshaji kama ifuatavyo:"%B %d, %Y".

Ambapo:

  • %B - Jina kamili la mwezi
  • %d - Idadi ya siku katika mwezi
  • %Y - Uteuzi wa miaka ya tarakimu nne

Wakati wa kuelezea muundo wa tarehe, ni muhimu kujumuisha herufi zote za ziada kutoka kwa mfuatano wako, kama vile deshi, koma, vipindi, nafasi, na kadhalika. Katika mfano wangu, "Septemba 26, 2019", kuna koma baada ya tarehe, na unahitaji pia kuweka koma katika maelezo ya umbizo:"%B %d, %Y".

Kuna hali wakati unapokea tarehe ambayo sio tu hailingani na fomati za kawaida (YYYY-MM-DD au YYYY/MM/DD), lakini pia katika lugha ambayo ni tofauti na ile chaguo-msingi iliyosakinishwa kwenye mfumo wako wa uendeshaji. Kwa mfano, ulipakua data ambapo tarehe imeonyeshwa kama hii: "Desemba 15, 2019." Kabla ya kubadilisha mfuatano huu hadi tarehe, unahitaji kubadilisha eneo.

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

Kuchimbua vipengele vya tarehe katika msingi R

Hakuna chaguo nyingi za kukokotoa katika R msingi zinazokuruhusu kutoa sehemu yoyote ya tarehe kutoka kwa kitu cha darasa tarehe.

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

Mbali na darasa kuu la kitu tarehe kwa msingi R kuna aina 2 zaidi za data ambazo huhifadhi muhuri wa muda: POSIXlt, POSIXct. Tofauti kuu kati ya madarasa haya na tarehe ni kwamba pamoja na tarehe wanahifadhi muda.

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

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

# "POSIXct" "POSIXt"

Kazi Sys.time() inarejesha tarehe na wakati wa sasa katika umbizo POSIXct. Umbizo hili linafanana kimaana na MUDA WA SAWA, na huhifadhi idadi ya sekunde tangu mwanzo wa enzi ya UNIX (usiku wa manane (UTC) kutoka Desemba 31, 1969 hadi Januari 1, 1970).

Hatari POSIXlt pia huhifadhi wakati na tarehe, na vipengele vyake vyote. Kwa hivyo, ni kitu kilicho na muundo ngumu zaidi, lakini ambayo ni rahisi kupata sehemu yoyote ya tarehe na wakati kwa sababu. kwa kweli POSIXlt hii orodha.

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

Kubadilisha data ya nambari na maandishi kuwa fomati POSIX* unaotekelezwa na majukumu as.POSIXct() и as.POSIXlt(). Vipengele hivi vina seti ndogo ya hoja.

  • x - Nambari, kamba au kitu cha darasa tarehe, ambayo inahitaji kubadilishwa;
  • tz - Eneo la saa, chaguo-msingi "GMT";
  • umbizo - Maelezo ya muundo wa tarehe ambayo data iliyopitishwa kwa hoja ya x inawakilishwa;
  • asili - Inatumika tu wakati wa kubadilisha nambari kuwa POSIX; lazima upitishe kitu cha tarehe na wakati ambao sekunde huhesabiwa kuwa hoja hii. Kwa kawaida hutumika kwa tafsiri kutoka UNIXTIME.

Ikiwa habari yako ya tarehe na wakati iko ndani MUDA WA SAWA, kisha kuzibadilisha kuwa tarehe iliyo wazi, inayoweza kusomeka, tumia mfano ufuatao:

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

Asili unaweza kubainisha muhuri wa muda wowote. Kwa mfano, ikiwa data yako ina tarehe na saa kama idadi ya sekunde tangu tarehe 15 Septemba 2019 12:15 pm, basi ibadilishwe kuwa matumizi ya tarehe:

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

Kufanya kazi na tarehe kwa kutumia kifurushi cha lubridate

lubridate Labda kifurushi maarufu zaidi cha kufanya kazi na tarehe katika lugha ya R. Inakupa madarasa matatu ya ziada.

  • durations - muda, i.e. idadi ya sekunde kati ya mihuri ya nyakati mbili;
  • vipindi - vipindi vinakuwezesha kufanya mahesabu kati ya tarehe katika vipindi vinavyoweza kusomeka na binadamu: siku, miezi, wiki, na kadhalika;
  • vipindi - vitu vinavyotoa mahali pa kuanzia na kumalizia kwa wakati.

Ufungaji wa vifurushi vya ziada katika lugha ya R unafanywa kwa kutumia kazi ya kawaida install.packages().

Kufunga kifurushi lubridate:

install.packages("lubridate")

Badilisha maandishi kuwa tarehe kwa kutumia lubridate

Vipengele vya kifurushi lubridate kwa kiasi kikubwa kurahisisha mchakato wa kubadilisha maandishi kuwa tarehe, na pia kukuruhusu kufanya shughuli zozote za hesabu na tarehe na nyakati.

Vipengele vitakusaidia kupata tarehe au tarehe na wakati wa sasa today() и now().

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

Ili kubadilisha mfuatano kuwa tarehe ndani lubridate Kuna familia nzima ya kazi ambazo majina yao huwa na herufi tatu kila wakati, na zinaonyesha mlolongo wa vipengele vya tarehe:

  • y - mwaka
  • m - mwezi
  • d - siku

Orodha ya chaguo za kukokotoa za kubadilisha maandishi hadi tarehe kupitia lubridate

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

Baadhi ya mifano ya kubadilisha mifuatano kuwa tarehe:

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

Kama unaweza kuona lubridate Ni bora zaidi katika kutambua maelezo ya tarehe kama maandishi, na hukuruhusu kubadilisha maandishi kuwa ya sasa bila kutumia viendeshaji vya ziada kuelezea umbizo.

Kuchimba vipengele vya tarehe kwa kutumia kifurushi cha lubridate

Pia kutumia lubridate unaweza kupata sehemu yoyote kutoka tarehe:

dt <- ymd("2017 jan 21")

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

Uendeshaji wa hesabu na tarehe

Lakini utendaji muhimu zaidi na wa msingi lubridate ni uwezo wa kufanya shughuli mbalimbali za hesabu na tarehe.

Upangaji wa tarehe unafanywa na kazi tatu:

  • floor_date — kuzungusha hadi katika wakati uliopita ulio karibu zaidi
  • ceiling_date - kuzunguka kwa wakati wa karibu ujao
  • round_date - kuzungusha hadi wakati wa karibu

Kila moja ya kazi hizi ina hoja kitengoambayo hukuruhusu kutaja kitengo cha kuzunguka: sekunde, dakika, saa, siku, wiki, mwezi, mwezi, robo, msimu, nusu mwaka, mwaka.

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

Kwa hivyo wacha tuangalie jinsi ya kupata tarehe ambayo ni siku 8 baada ya tarehe ya sasa na tufanye mahesabu mengine tofauti ya hesabu kati ya tarehe hizo mbili.

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

Kazi iliyorahisishwa na vipindi, kifurushi cha timeperiodsR.

timeperiodsR - kifurushi kipya cha kufanya kazi na tarehe ambacho kilichapishwa kwenye CRAN mnamo Septemba 2019.

Kufunga kifurushi timeperiodsR:

install.packages("timeperiodsR")

Kusudi kuu ni kuamua haraka muda fulani wa wakati unaohusiana na tarehe fulani. Kwa mfano, kwa kutumia kazi zake unaweza kwa urahisi:

  • Pata wiki, mwezi, robo au mwaka uliopita katika R.
  • Pata idadi maalum ya vipindi vinavyohusiana na tarehe, kwa mfano wiki 4 zilizopita.
  • Ni rahisi kutoa vipengele vyake kutoka kwa muda unaosababisha: tarehe ya kuanza na mwisho, idadi ya siku zilizojumuishwa katika muda, mlolongo mzima wa tarehe ambazo zimejumuishwa ndani yake.

Jina la vitendaji vyote vya kifurushi timeperiodsR ni angavu na inajumuisha sehemu mbili: mwelekeo_muda, ambapo:

  • mwelekeo ambamo unahitaji kuhama kulingana na tarehe fulani: last_n, uliopita, hii, ijayo, ijayo_n.
  • ya muda mfupi muda kuhesabu kipindi: siku, wiki, mwezi, robo, mwaka.

Seti kamili ya vitendaji:

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

Vipindi vya muda katika vipindi vya wakatiR

Vipengele hivi ni muhimu katika hali ambapo unahitaji kuunda ripoti kulingana na data ya wiki au mwezi uliopita. Ili kupata mwezi uliopita, tumia chaguo la kukokotoa la jina moja previous_month():

prmonth <- previous_month()

Baada ya hapo utakuwa na kitu mwezi tabaka la tpr, ambayo vipengele vifuatavyo vinaweza kupatikana kwa urahisi:

  • tarehe ya kuanza kwa kipindi, kwa mfano wetu huu ni mwezi wa mwisho
  • tarehe ya mwisho wa kipindi
  • idadi ya siku zilizojumuishwa katika kipindi
  • mlolongo wa tarehe zilizojumuishwa katika kipindi hicho

Kwa kuongeza, unaweza kupata kila moja ya vipengele kwa njia tofauti:

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

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

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

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

Unaweza pia kupata sehemu yoyote kwa kutumia hoja sehemu, ambayo iko katika kila kazi ya kifurushi. Thamani zinazowezekana: mwanzo, mwisho, mlolongo, urefu.

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

Kwa hivyo, wacha tuangalie hoja zote zinazopatikana katika kazi za kifurushi timeperiodsR:

  • x - Tarehe ya kumbukumbu ambayo kipindi cha muda kitahesabiwa, tarehe ya sasa kwa chaguo-msingi;
  • n - Idadi ya vipindi ambavyo vitajumuishwa katika kipindi hicho, kwa mfano wiki 3 zilizopita;
  • part - Ni sehemu gani ya kitu tpr unahitaji kupata, kwa chaguo-msingi all;
  • week_start - Hoja iko katika utendaji wa kufanya kazi na wiki pekee, na hukuruhusu kuweka nambari ya siku ya juma ambayo itazingatiwa kuwa mwanzo wake. Kwa chaguo-msingi, mwanzo wa juma ni Jumatatu, lakini unaweza kuweka yoyote kuanzia 1 - Jumatatu hadi 7 - Jumapili.

Kwa hivyo, unaweza kuhesabu muda wowote unaohusiana na sasa au tarehe nyingine yoyote; hapa kuna mifano michache zaidi:

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

Oktoba 6 ni Jumapili:
Kufanya kazi na tarehe katika R (uwezo wa kimsingi, na vile vile vifurushi vya lubridate na timeperiodsR)

Tunahitaji kipindi ambacho, kulingana na Oktoba 6, kitachukua wiki 3 zilizopita. Bila kujumuisha wiki inayojumuisha Oktoba 6 yenyewe. Ipasavyo, hii ni kipindi cha kuanzia Septemba 9 hadi Septemba 29.

Kufanya kazi na tarehe katika R (uwezo wa kimsingi, na vile vile vifurushi vya lubridate na 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

Katika mfano huu, tunavutiwa na mwezi ambao ulikuwa miezi 4 iliyopita, ikiwa tutaanza kutoka Septemba 16, 2019, basi ilikuwa Mei 2019.

Kuchuja vekta ya tarehe kwa kutumia timeperiodsR

Ili kuchuja tarehe ndani timeperiodsR Kuna waendeshaji kadhaa:

  • %left_out% - inalinganisha vitu viwili vya darasa la tpr, na kurudisha thamani kutoka kwa ile ya kushoto ambayo haipo katika moja ya kulia.
  • %left_in% - inalinganisha vitu viwili vya darasa la tpr, na inarudisha tarehe kutoka kwa kitu cha kushoto ambacho kimejumuishwa kwenye kile cha kulia.
  • %right_out% - inalinganisha vitu viwili vya darasa la tpr, na inarudisha thamani kutoka kwa ile ya kulia ambayo haipo kutoka kwa ile ya kushoto.
  • %right_in% - inalinganisha vitu viwili vya darasa la tpr, na hurejesha tarehe kutoka kwa kitu cha kulia ambacho kipo kwenye cha kushoto.

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

Kwenye kifurushi timeperiodsR kuna rasmi, lugha ya Kirusi Orodha ya kucheza ya YouTube.

Hitimisho

Tulichunguza kwa undani madarasa ya vitu ambavyo vimeundwa kwa lugha ya R kwa kufanya kazi na tarehe. Pia sasa unaweza kufanya shughuli za hesabu kwa tarehe, na kupata haraka vipindi vya wakati wowote kwa kutumia kifurushi timeperiodsR.

Ikiwa una nia ya lugha ya R, ninakualika ujiandikishe kwa kituo changu cha telegram Uuzaji wa R4, ambamo mimi hushiriki nyenzo muhimu kila siku kuhusu kutumia lugha ya R katika kutatua matatizo yako ya kila siku.

Chanzo: mapenzi.com

Kuongeza maoni