Ua hauj lwm nrog cov hnub hauv R (cov peev txheej hauv paus, nrog rau cov pob khoom siv roj thiab lub sijhawm R)

Tau txais hnub tam sim no hauv ib hom lus programming, kev ua haujlwm sib npaug rau "Nyob zoo ntiaj teb!" R hom lus tsis muaj kev zam.

Hauv tsab xov xwm no, peb yuav saib yuav ua li cas ua haujlwm nrog cov hnub ua haujlwm hauv cov ntsiab lus ntawm R hom lus, thiab tseem saib ob peb lub pob muaj txiaj ntsig uas nthuav dav nws lub peev xwm thaum ua haujlwm nrog cov hnub:

  • lubridate - ib pob uas tso cai rau koj ua lej lej ntawm hnub;
  • timeperiodsR - ib pob rau kev ua haujlwm nrog lub sijhawm luv thiab lawv cov khoom.

Ua hauj lwm nrog cov hnub hauv R (cov peev txheej hauv paus, nrog rau cov pob khoom siv roj thiab lub sijhawm R)

Txheem

Yog tias koj txaus siab rau kev txheeb xyuas cov ntaub ntawv, thiab tshwj xeeb yog R hom lus, koj tuaj yeem txaus siab rau kuv telegram и youtube cov channel. Cov ntsiab lus feem ntau yog mob siab rau R hom lus.

  1. Ua hauj lwm nrog cov hnub nyob rau hauv qhov yooj yim R syntax
    1.1. Hloov cov ntawv mus rau hnub tim
    1.2. Extracting hnub Cheebtsam hauv Basic R
  2. Ua hauj lwm nrog cov hnub siv lub pob zeb lubrication
    2.1. Hloov cov ntawv mus rau hnub uas siv lubricate
    2.2. Extracting hnub Cheebtsam siv lub lubricants pob
    2.3. Kev ua lej lej nrog cov hnub
  3. Yooj yim ua hauj lwm nrog lub sij hawm, timeperiodsR pob
    3.1. Lub sijhawm ncua sijhawm hauv timeperiodsR
    3.2. Lim ib vector ntawm hnub siv timeperiodsR
  4. xaus

Ua hauj lwm nrog cov hnub nyob rau hauv qhov yooj yim R syntax

Hloov cov ntawv mus rau hnub tim

Basic R muaj cov txheej txheem ua haujlwm nrog rau hnub. Qhov tsis zoo ntawm cov syntax yooj yim yog tias rooj plaub ntawm cov npe ua haujlwm thiab cov lus sib cav tau tawg heev thiab tsis muaj kev sib txuas lus zoo. Txawm li cas los xij, koj yuav tsum paub cov haujlwm tseem ceeb ntawm cov lus, yog li peb yuav pib nrog lawv.

Feem ntau thaum thauj cov ntaub ntawv rau hauv R, los ntawm cov ntaub ntawv csv, lossis lwm qhov chaw, koj tau txais hnub tim raws li ntawv. Txhawm rau hloov cov ntawv no mus rau hom ntaub ntawv raug, siv txoj haujlwm 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"

los ntawm neej ntawd hais as.Date() lees txais hnub nyob rau hauv ob hom: YYYY-MM-DD los yog YYYY/MM/DD.
Yog tias koj cov ntaub ntawv teev muaj cov hnub nyob rau hauv lwm hom ntawv, koj tuaj yeem siv qhov kev sib cav format.

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

hom lees txais cov neeg ua haujlwm hauv txoj hlua daim ntawv qhia txhua lub sijhawm ib ntus thiab nws cov hom ntawv; feem ntau siv cov txiaj ntsig tau qhia hauv cov lus hauv qab no:

Hom ntawv
piav qhia

%d
Hnub naj npawb hauv lub hli

%a
Cov ntawv luv rau lub npe hnub ntawm lub lim tiam

%A
Lub npe tag nrho ntawm hnub ntawm lub lim tiam

%w
Tus naj npawb ntawm hnub ntawm lub lim tiam (0-6, qhov twg 0 yog hnub Sunday)

%m
Lub hli thib ob (01-12)

%b
Lub npe ntawm lub hli (lub Plaub Hlis, Mar, ...)

%B
Lub hli puv lub npe

%y
Ob tug lej npe xyoo

%Y
Plaub-tus lej npe xyoo

%j
Hnub naj npawb hauv xyoo (001 - 366)

%U
Tus naj npawb ntawm lub lim tiam hauv lub xyoo (00 - 53), pib ntawm lub lim tiam Hnub Sunday

%W
Lub lim tiam tus lej hauv xyoo (00 - 53), pib ntawm lub lim tiam Monday

Raws li, "Lub Cuaj Hlis 26, 2019" yog lub npe tag nrho ntawm lub hli, hnub tim thiab xyoo. Daim ntawv hnub no tuaj yeem piav qhia siv cov neeg ua haujlwm raws li hauv qab no:"%B %d, %Y".

Qhov twg:

  • %B - Lub npe tag nrho ntawm lub hli
  • %d - Tus naj npawb ntawm hnub hauv lub hli
  • %Y - Plaub-tus lej npe xyoo

Thaum piav txog cov hom hnub, nws yog ib qho tseem ceeb kom suav tag nrho cov cim ntxiv ntawm koj txoj hlua, xws li dashes, commas, lub sijhawm, qhov chaw, thiab lwm yam. Hauv kuv qhov piv txwv, "Lub Cuaj Hlis 26, 2019", muaj ib qho cim tom qab hnub, thiab koj kuj yuav tsum tau muab tus lej cim rau hauv cov lus piav qhia:"%B %d, %Y".

Muaj cov xwm txheej thaum koj tau txais hnub uas tsis tsuas yog tsis sib haum rau cov qauv qauv (YYYY-MM-DD or YYYY/MM/DD), tab sis kuj nyob rau hauv ib hom lus uas txawv ntawm lub neej ntawd ib tug nruab rau koj lub operating system. Piv txwv li, koj rub tawm cov ntaub ntawv uas hnub tau qhia zoo li no: "Lub Kaum Ob Hlis 15, 2019." Ua ntej hloov txoj hlua no mus rau hnub tim, koj yuav tsum hloov qhov chaw.

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

Extracting hnub Cheebtsam hauv Basic R

Tsis muaj ntau txoj haujlwm hauv R yooj yim uas tso cai rau koj rho tawm ib feem ntawm hnub los ntawm cov khoom hauv chav kawm Hnub.

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

Ntxiv rau cov khoom tseem ceeb hauv chav kawm Hnub hauv R hauv paus muaj 2 hom ntaub ntawv ntxiv uas khaws lub sijhawm: POSIXlt, POSIXct. Qhov txawv ntawm cov chav kawm no thiab Hnub yog tias ntxiv rau hnub lawv khaws lub sijhawm.

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

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

# "POSIXct" "POSIXt"

muaj nuj nqi Sys.time() rov qab hnub thiab sijhawm tam sim no hauv hom ntawv POSIXct. Hom ntawv no zoo ib yam li lub ntsiab lus rau UNIXTIME, thiab khaws cov naj npawb ntawm vib nas this txij thaum pib ntawm UNIX era (Ib tag hmo (UTC) txij lub Kaum Ob Hlis 31, 1969 txog Lub Ib Hlis 1, 1970).

Класс POSIXlt nws tseem khaws lub sijhawm thiab hnub tim, thiab tag nrho lawv cov khoom. Yog li ntawd, nws yog ib yam khoom nrog ib tug complex qauv, tab sis los ntawm qhov uas nws yog ib qho yooj yim kom tau txais ib hnub twg thiab lub sij hawm tivthaiv vim qhov tseeb POSIXlt nws daim ntawv teev.

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

Hloov cov lej thiab cov ntaub ntawv rau hauv hom POSIX* ua los ntawm kev ua haujlwm as.POSIXct() и as.POSIXlt(). Cov haujlwm no muaj cov lus sib cav me me.

  • x — Tus lej, txoj hlua lossis cov khoom hauv chav kawm Hnub, uas yuav tsum tau hloov dua siab tshiab;
  • tz — Sijhawm tsam, default "GMT";
  • hom ntawv — Cov lus piav qhia ntawm hnub hom ntawv uas cov ntaub ntawv dhau mus rau x sib cav yog sawv cev;
  • keeb kwm - Siv tsuas yog thaum hloov tus lej rau POSIX; koj yuav tsum dhau lub hnub thiab lub sijhawm uas cov vib nas this suav rau qhov kev sib cav no. Feem ntau siv rau kev txhais lus los ntawm UNIXTIME.

Yog tias koj cov ntaub ntawv hnub thiab sijhawm nyob hauv UNIXTIME, tom qab ntawd los hloov lawv mus rau hnub meej, nyeem tau, siv cov piv txwv hauv qab no:

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

Hauv keeb kwm koj tuaj yeem qhia txhua lub sijhawm. Piv txwv li, yog tias koj cov ntaub ntawv muaj hnub tim thiab lub sijhawm raws li tus naj npawb ntawm vib nas this txij lub Cuaj Hlis 15, 2019 12:15 teev tsaus ntuj, ces hloov nws mus rau hnub siv:

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

Ua hauj lwm nrog cov hnub siv lub pob zeb lubrication

lubridate Tej zaum lub pob nrov tshaj plaws rau kev ua haujlwm nrog cov hnub hauv R hom lus. Nws muab peb chav kawm ntxiv rau koj.

  • durations — duration, i.e. tus naj npawb ntawm cov vib nas this ntawm ob lub sijhawm;
  • lub sij hawm - lub sij hawm tso cai rau koj los xam cov hnub nyob rau hauv tib neeg nyeem ib ntus: hnub, hli, lis piam, thiab hais txog;
  • intervals - cov khoom uas muab qhov pib thiab xaus rau lub sijhawm.

Kev txhim kho cov pob khoom ntxiv hauv R hom yog ua los ntawm kev siv tus qauv ua haujlwm install.packages().

Txhim kho lub pob lubridate:

install.packages("lubridate")

Hloov cov ntawv mus rau hnub uas siv lubricate

Pob nta lubridate ua kom yooj yim cov txheej txheem ntawm kev hloov cov ntawv mus rau hauv ib hnub, thiab tseem tso cai rau koj ua tiav cov lej lej nrog hnub thiab sijhawm.

Cov haujlwm yuav pab koj tau txais hnub tim lossis hnub thiab sijhawm tam sim no today() и now().

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

Hloov ib txoj hlua mus rau hnub hauv lubridate Muaj tag nrho tsev neeg ntawm kev ua haujlwm uas nws cov npe ib txwm muaj peb tsab ntawv, thiab qhia txog qhov sib lawv liag ntawm cov hnub:

  • y xyoo
  • m - muaj
  • d - ntev

Daim ntawv teev cov haujlwm rau hloov cov ntawv mus rau hnub tim ntawm lubridate

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

Qee qhov piv txwv rau kev hloov cov hlua rau hnub:

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

Raws li koj tau pom lubridate Nws yog qhov ua tau zoo dua ntawm kev lees paub hnub piav qhia raws li cov ntawv nyeem, thiab tso cai rau koj hloov cov ntawv mus rau hnub tsis tas siv cov neeg ua haujlwm ntxiv los piav txog hom ntawv.

Extracting hnub Cheebtsam siv lub lubricants pob

Kuj siv lubridate Koj tuaj yeem tau txais ib qho khoom ntawm ib hnub:

dt <- ymd("2017 jan 21")

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

Kev ua lej lej nrog cov hnub

Tab sis qhov tseem ceeb tshaj plaws thiab yooj yim functionality lubridate yog lub peev xwm los ua ntau yam kev ua lej lej nrog cov hnub.

Hnub rounding yog ua los ntawm peb txoj haujlwm:

  • floor_date - hloov mus rau qhov ze tshaj yav dhau los tense
  • ceiling_date - hloov mus rau lub sijhawm ze yav tom ntej
  • round_date - hloov mus rau lub sijhawm ze tshaj plaws

Txhua yam ntawm cov haujlwm no muaj kev sib cav chav tsevuas tso cai rau koj los qhia kom meej lub rounding unit: thib ob, feeb, teev, hnub, lis piam, hli, bimonth, quarter, caij, ib nrab xyoo, xyoo

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

Yog li cia peb xam seb yuav ua li cas thiaj li tau txais hnub tim 8 hnub tom qab hnub tam sim no thiab ua ntau yam kev suav lej ntawm ob hnub.

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

Yooj yim ua hauj lwm nrog lub sij hawm, timeperiodsR pob.

timeperiodsR - ib pob tshiab rau kev ua haujlwm nrog cov hnub uas tau tshaj tawm ntawm CRAN thaum lub Cuaj Hli 2019.

Txhim kho lub pob timeperiodsR:

install.packages("timeperiodsR")

Lub hom phiaj tseem ceeb yog txhawm rau txiav txim siab sai sai rau qee lub sijhawm luv ntawm cov txheeb ze rau hnub tim. Piv txwv li, siv nws cov haujlwm koj tuaj yeem yooj yim:

  • Tau txais lub lim tiam dhau los, hli, lub hlis twg lossis xyoo hauv R.
  • Tau txais ib lub sij hawm luv luv uas cuam tshuam txog hnub, piv txwv li 4 lub lis piam dhau los.
  • Nws yog ib qho yooj yim los rho tawm nws cov khoom los ntawm lub sijhawm tshwm sim: hnub pib thiab hnub kawg, cov hnub suav nrog lub sijhawm, tag nrho cov kab ke ntawm cov hnub uas suav nrog hauv nws.

Lub npe ntawm tag nrho cov haujlwm pob timeperiodsR yog intuitive thiab muaj ob ntu: kev coj_luv, nyob qhov twg:

  • kev coj nyob rau hauv uas koj yuav tsum tau tsiv mus nyob txheeb ze rau ib hnub twg: last_n, yav dhau los, qhov no, tom ntej no, next_n.
  • ib ntus luv xam lub sij hawm: hnub, lis piam, hli, quarter, xyoo.

Tag nrho cov kev ua haujlwm:

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

Lub sijhawm ncua sijhawm hauv timeperiodsR

Cov haujlwm no muaj txiaj ntsig zoo nyob rau hauv rooj plaub uas koj yuav tsum tsim cov ntawv ceeb toom raws li cov ntaub ntawv los ntawm lub lim tiam dhau los lossis hli. Kom tau txais lub hli tas los, siv lub luag haujlwm ntawm tib lub npe previous_month():

prmonth <- previous_month()

Tom qab ntawd koj yuav muaj qhov khoom pib chav kawm tpr ua, los ntawm cov khoom hauv qab no tuaj yeem yooj yim tau:

  • hnub pib ntawm lub sijhawm, hauv peb qhov piv txwv no yog lub hli dhau los
  • hnub kawg ntawm lub sijhawm
  • cov hnub suav nrog hauv lub sijhawm
  • cov hnub ua ntu zus suav nrog hauv lub sijhawm

Ntxiv mus, koj tuaj yeem tau txais txhua yam ntawm cov khoom sib txawv:

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

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

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

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

Koj tuaj yeem tau txais ib qho ntawm cov khoom siv los ntawm kev sib cav ib feem, uas yog tam sim no nyob rau hauv txhua lub pob ua haujlwm. Cov txiaj ntsig tau: pib, kawg, ntu ntu, ntev.

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

Yog li cia saib tag nrho cov lus sib cav muaj nyob rau hauv lub pob ua haujlwm timeperiodsR:

  • x - Hnub siv los ntawm lub sij hawm lub sij hawm yuav raug xam, hnub tam sim no los ntawm lub neej ntawd;
  • n - Tus naj npawb ntawm cov ntu uas yuav suav nrog hauv lub sijhawm, piv txwv li 3 lub lis piam dhau los;
  • part - Yam khoom ntawm qhov khoom tpr koj yuav tsum tau, los ntawm lub neej ntawd all;
  • week_start - Cov lus sib cav tsuas yog nyob rau hauv kev ua haujlwm rau kev ua haujlwm nrog lub lis piam, thiab tso cai rau koj los teeb tsa tus lej ntawm hnub ntawm lub limtiam uas yuav suav tias yog nws pib. 1 - Monday txog 7 - Sunday.

Yog li, koj tuaj yeem suav txhua lub sijhawm lub sijhawm txheeb ze rau tam sim no lossis lwm hnub muab; ntawm no yog ob peb yam piv txwv ntxiv:

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

Lub Kaum Hli 6 yog Hnub Sunday:
Ua hauj lwm nrog cov hnub hauv R (cov peev txheej hauv paus, nrog rau cov pob khoom siv roj thiab lub sijhawm R)

Peb xav tau lub sijhawm uas, piv rau Lub Kaum Hli 6, yuav siv sijhawm 3 lub lis piam dhau los. Tsis suav nrog lub lim tiam uas suav nrog Lub Kaum Hli 6 nws tus kheej. Raws li, qhov no yog lub sijhawm txij lub Cuaj Hlis 9 txog Lub Cuaj Hli 29.

Ua hauj lwm nrog cov hnub hauv R (cov peev txheej hauv paus, nrog rau cov pob khoom siv roj thiab lub sijhawm R)

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

Hauv qhov piv txwv no, peb xav txog lub hli uas yog 4 lub hlis dhau los, yog peb pib txij lub Cuaj Hlis 16, 2019, ces yog lub Tsib Hlis 2019.

Lim ib vector ntawm hnub siv timeperiodsR

Txhawm rau lim cov hnub hauv timeperiodsR Muaj ntau tus neeg ua haujlwm:

  • %left_out% - piv ob tpr cov khoom hauv chav kawm, thiab rov qab tus nqi los ntawm sab laug ib qho uas ploj lawm nyob rau sab xis.
  • %left_in% - piv ob yam khoom ntawm chav kawm tpr, thiab xa cov hnub los ntawm cov khoom sab laug uas suav nrog rau sab xis.
  • %right_out%.
  • %right_in% - piv ob yam khoom ntawm chav kawm tpr, thiab rov qab hnub los ntawm cov khoom sab xis uas muaj nyob rau sab laug.

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

Ntawm lub pob timeperiodsR muaj ib tug official, Lavxias teb sab lus YouTube playlist.

xaus

Peb tau tshuaj xyuas kom meej txog cov chav kawm ntawm cov khoom uas tau tsim hauv R hom lus rau kev ua haujlwm nrog hnub tim. Tsis tas li tam sim no koj tuaj yeem ua cov lej lej ntawm cov hnub, thiab tau txais lub sijhawm sai sai uas siv lub pob timeperiodsR.

Yog koj xav paub lus R, thov caw koj mus sau npe rau kuv tus xov tooj R4 kev lag luam, nyob rau hauv uas kuv qhia cov ntaub ntawv tseem ceeb nyob rau hauv ib hnub twg txog kev siv cov lus R hauv kev daws koj cov teeb meem niaj hnub.

Tau qhov twg los: www.hab.com

Ntxiv ib saib