# создаём текстовый вектор с датами
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"
бо пешфарз as.Date() санаро дар ду формат қабул мекунад: САА-АА-ДД ё САА/ММ/ДД.
Агар маҷмӯи додаҳои шумо дорои санаҳо дар ягон формати дигар бошад, шумо метавонед далелро истифода баред format.
as.Date("September 26, 2019", format = "%B %d, %Y")
формат операторҳоро дар шакли сатр қабул мекунад, ки ҳар як фосилаи вақт ва формати онро ифода мекунад; арзишҳои маъмултарин дар ҷадвали зер нишон дода шудаанд:
Мувофиқи он, "26 сентябри соли 2019" номи пурраи моҳ, сана ва сол мебошад. Ин формати санаро бо истифода аз операторҳо ба таври зерин тавсиф кардан мумкин аст:"%B %d, %Y".
Дар куҷо:
%B — Номи пурраи моҳ
%d - Шумораи рӯз дар моҳ
%Y — Нишондихандаи соли чорй
Ҳангоми тавсифи формати сана, муҳим аст, ки ҳамаи аломатҳои иловагиро аз сатри худ дохил кунед, ба монанди тире, вергул, нуқтаҳо, фосилаҳо ва ғайра. Дар мисоли ман, "26 сентябри соли 2019", пас аз сана вергул мавҷуд аст ва шумо инчунин бояд дар тавсифи формат вергул гузоред:"%B %d, %Y".
Ҳолатҳое ҳастанд, ки шумо санаеро мегиред, ки на танҳо ба форматҳои стандартӣ мувофиқат намекунад (САА-АА-ДД ё САА/АА/ДД), балки инчунин бо забоне, ки аз забони пешфарз, ки дар системаи оператсионии шумо насб шудааст, фарқ мекунад. Масалан, шумо маълумотеро зеркашӣ кардед, ки санаи он чунин нишон дода шудааст: "15 декабри соли 2019." Пеш аз табдил додани ин сатр ба сана, шумо бояд маҳаллиро тағир диҳед.
# Меняем локаль
Sys.setlocale("LC_TIME", "Russian")
# Конвертируем строку в дату
as.Date("Декабрь 15, 2019 г.", format = "%B %d, %Y")
Истихроҷи ҷузъҳои сана дар R
Дар R асосӣ функсияҳои зиёд вуҷуд надоранд, ки ба шумо имкон медиҳанд, ки ягон қисми санаро аз объекти синфӣ ҷудо кунед таърих.
current_date <- Sys.Date() # текущая дата
weekdays(current_date) # получить номер дня недели
months(current_date) # получить номер месяца в году
quarters(current_date) # получить номер квартала в году
Илова ба синфи объекти асосӣ таърих дар R асосӣ боз 2 намуди маълумот мавҷуд аст, ки тамғаи вақтро нигоҳ медоранд: POSIXlt, POSIXct. Фарқи асосии байни ин синфҳо ва таърих он аст, ки илова ба санае, ки онҳо вақтро захира мекунанд.
# получить текущую дату и время
current_time <- Sys.time()
# узнать класс объекта current_time
class(current_time)
# "POSIXct" "POSIXt"
функсия Sys.time() сана ва вақти ҷорӣро дар формат бармегардонад POSIXct. Ин формат аз ҷиҳати маъно ба он монанд аст UNIXTIME, ва миқдори сонияҳоро аз оғози давраи UNIX нигоҳ медорад (нисфи шаб (UTC) аз 31 декабри соли 1969 то 1 январи соли 1970).
Синф POSIXlt он инчунин вақт ва сана ва тамоми ҷузъҳои онҳоро нигоҳ медорад. Аз ин рӯ, он объекти дорои сохтори мураккабтар аст, вале аз он ба осонӣ ба даст овардани ҳама гуна ҷузъи сана ва вақт аст, зеро дар асл POSIXlt ин рӯйхат.
# Получаем текущую дату и время
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 # часовой пояс
Табдил додани маълумоти рақамӣ ва матнӣ ба форматҳо POSIX* аз рӯи вазифаҳо амалӣ карда мешавад as.POSIXct() и as.POSIXlt(). Ин функсияҳо маҷмӯи хурди аргументҳо доранд.
Ҳар яке аз ин функсияҳо далел доранд воҳимаки ба шумо имкон медиҳад воҳиди яклухтро муайян кунед: сония, дақиқа, соат, рӯз, ҳафта, моҳ, думоҳа, семоҳа, мавсим, нимсола, сол
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") # округлить до полугодия
today() + days(8) # какая дата будет через 8 дней
today() - months(2) # какая дата была 2 месяца назад
today() + weeks(12) # какая дата будет через 12 недель
today() - years(2) # какая дата была 2 года назад
Кори соддакардашуда бо давраҳо, бастаи timeperiodsR.
timeperiodsR - бастаи нав барои кор бо санаҳо, ки дар CRAN дар моҳи сентябри соли 2019 нашр шудааст.
Насб кардани баста timeperiodsR:
install.packages("timeperiodsR")
Мақсади асосӣ ин аст, ки зуд муайян кардани фосилаи вақти муайян нисбат ба санаи додашуда. Масалан, бо истифода аз функсияҳои он шумо метавонед ба осонӣ:
Пас аз он шумо объект хоҳед дошт пеш дараҷа тпр, ки аз он ҷузъҳои зеринро ба осонӣ ба даст овардан мумкин аст:
санаи оғози давра, дар мисоли мо ин моҳи охир аст
санаи анҷоми давра
шумораи рӯзҳое, ки ба давра дохил карда шудаанд
пайдарпайии санаҳои ба давра дохилшуда
Ғайр аз он, шумо метавонед ҳар як ҷузъро бо роҳҳои гуногун ба даст оред:
# первый день периода
prmonth$start
start(prmonth)
# последний день периода
prmonth$end
end(prmonth)
# последовательность дат
prmonth$sequence
seq(prmonth)
# количество дней входящих в период
prmonth$length
length(prmonth)
Шумо инчунин метавонед бо истифода аз аргумент ягон ҷузъро гиред қисми, ки дар ҳар як функсияи баста мавҷуд аст. Қиматҳои имконпазир: оғоз, анҷом, пайдарпаӣ, дарозӣ.
previous_month(part = "start") # начало периода
previous_month(part = "end") # конец периода
previous_month(part = "sequence") # последовательность дат
previous_month(part = "length") # количество дней в периоде
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