اوسنۍ نیټه په هره پروګرامینګ ژبه کې ترلاسه کړئ، یو عملیات چې د "سلام نړۍ!" سره برابر دی. د R ژبه استثنا نه ده.
په دې مقاله کې، موږ به وګورو چې څنګه د نیټو سره کار کول د R ژبې په اساسي ترکیب کې کار کوي، او همدارنګه یو څو ګټور کڅوړې وګورو چې د نیټې سره کار کولو پر مهال د هغې وړتیاوې پراخوي:
lubridate
- یوه بسته چې تاسو ته اجازه درکوي د نیټو تر مینځ د ریاضي محاسبې ترسره کړئ؛timeperiodsR
- د وخت وقفو او د دوی برخو سره د کار کولو لپاره کڅوړه.
منځپانګې
که تاسو د ډیټا تحلیلونو سره علاقه لرئ ، او په ځانګړي توګه د R ژبه ، تاسو ممکن زما سره علاقه ولرئ
په لومړني R ترکیب کې د نیټو سره کار کول
1.1.متن تاریخ ته بدل کړئ
1.2.په بنسټیز R کې د نیټې برخې استخراج د لبریډیټ کڅوړې په کارولو سره د نیټو سره کار کول
2.1.د لبریډیټ په کارولو سره متن نیټې ته بدل کړئ
2.2.د لبریډیټ کڅوړې په کارولو سره د نیټې برخې استخراج کول
2.3.د نیټو سره ریاضي عملیات د دورې، د وخت دورې آر پیکج سره ساده کار
3.1.د وخت وقفې په وخت کې R
3.2.د وخت دورې په کارولو سره د نیټو ویکتور فلټر کول پایلې
په لومړني R ترکیب کې د نیټو سره کار کول
متن تاریخ ته بدل کړئ
بنسټیز R د نیټو سره د کار کولو لپاره د دندو مجموعه لري. د اساسي ترکیب نیمګړتیا دا ده چې د فنکشن نومونو او دلیلونو قضیه خورا پراخه ده او په عملي توګه هیڅ منطقي اړیکه نلري. په هرصورت، تاسو اړتیا لرئ چې د ژبې بنسټیز کارونه وپیژنئ، نو موږ به یې پیل کړو.
ډیری وختونه کله چې د csv فایلونو، یا نورو سرچینو څخه R ته ډیټا پورته کول، تاسو د متن په توګه نیټه ترلاسه کوئ. د دې متن سم ډیټا ډول ته د بدلولو لپاره ، فنکشن وکاروئ 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"
په تلواله as.Date()
نیټه په دوه شکلونو کې مني: YYYY-MM-DD او یا YYYY/MM/DD.
که ستاسو د معلوماتو سیټ په کوم بل شکل کې نیټې ولري، تاسو کولی شئ دلیل وکاروئ format
.
as.Date("September 26, 2019", format = "%B %d, %Y")
شکل د سټرینګ په شکل کې آپریټرونه مني چې هر وخت وقفه او د هغې بڼه په ګوته کوي؛ ترټولو عام کارول شوي ارزښتونه په لاندې جدول کې ښودل شوي:
بڼه
شرح
%d
په میاشت کې د ورځې شمیر
%a
د اونۍ د ورځې نوم لپاره لنډیز
%A
د اونۍ د ورځې بشپړ نوم
%w
د اونۍ د ورځې شمیر (0-6، چیرته چې 0 یکشنبه ده)
%m
دوه عددي میاشت نومول (01-12)
%b
د میاشتې نوم لنډیز (اپریل، مارچ، ...)
%B
د بشپړ میاشتې نوم
%y
د کال دوه عددي نومول
%Y
د څلور عددي کال نومول
%j
په کال کې د ورځې شمیر (001 - 366)
%U
په کال کې د اونۍ شمیره (00 - 53)، د اونۍ پیل یکشنبه
%W
په کال کې د اونۍ شمیره (00 - 53)، د اونۍ پیل دوشنبه
په دې اساس، "د سپتمبر 26، 2019" د میاشتې، نیټې او کال بشپړ نوم دی. د دې نیټې بڼه په لاندې ډول د آپریټرونو په کارولو سره تشریح کیدی شي:"%B %d, %Y"
.
چیرته چې:
%B
- د میاشتې بشپړ نوم%d
- په میاشت کې د ورځې شمیر%Y
- د څلور عددي کال نومول
کله چې د نیټې بڼه بیان کړئ، نو دا مهمه ده چې ستاسو د تار څخه ټول اضافي حروف شامل کړئ، لکه ډیش، کوما، دورې، ځایونه او داسې نور. زما په مثال کې، "د سپتمبر 26، 2019"، د نیټې وروسته کوما شتون لري، او تاسو اړتیا لرئ چې د شکل په تفصیل کې کوما واچوئ:"%B %d, %Y"
.
داسې شرایط شتون لري کله چې تاسو یوه نیټه ترلاسه کوئ چې نه یوازې د معیاري شکلونو سره مطابقت نلري (YYYY-MM-DD یا YYYY/MM/DD)، مګر په یوه ژبه کې چې ستاسو په عملیاتي سیسټم کې نصب شوي ډیفالټ څخه توپیر لري. د مثال په توګه، تاسو ډیټا ډاونلوډ کړی چیرې چې نیټه په دې ډول ښودل شوې ده: "د دسمبر 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 کې دوه نور ډیټا ډولونه شتون لري چې د مهال ویش ذخیره کوي: 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 # часовой пояс
د عددي او متن ډیټا په شکلونو بدلول پوسکس* د دندو لخوا ترسره کیږي as.POSIXct()
и as.POSIXlt()
. دا دندې د دلیلونو کوچنۍ سیټ لري.
- x - شمیره، تار یا ټولګي اعتراض نېټه، کوم چې باید بدل شي؛
- tz - د وخت زون، ډیفالټ "GMT"؛
- بڼه - د نیټې بڼه توضیحات په کوم کې چې د x دلیل ته لیږدول شوي ډاټا استازیتوب کیږي؛
- اصليت - یوازې هغه وخت کارول کیږي کله چې یو شمیر POSIX ته واړوئ؛ تاسو باید د نیټې څیز او وخت تیر کړئ چې له هغې څخه ثانیې دې دلیل ته شمیرل کیږي. معمولا د UNIXTIME څخه د ژباړې لپاره کارول کیږي.
که ستاسو د نیټې او وخت معلومات په کې وي UNIXTIME، بیا یې په روښانه ، لوستلو وړ نیټې کې بدلولو لپاره ، لاندې مثال وکاروئ:
# Конвертируем UNIXTIME в читаемую дату
as.POSIXlt(1570084639, origin = "1970-01-01")
په اصل کې تاسو کولی شئ هر مهال ویش مشخص کړئ. د مثال په توګه، که ستاسو ډاټا د سپتمبر 15، 2019 12:15 بجو راهیسې د ثانیو شمیره نیټه او وخت ولري، نو بیا یې د نیټې کارولو لپاره بدل کړئ:
# Конвертируем UNIXTIME в дату учитывая что начало отсчёта 15 сентября 2019 12:15
as.POSIXlt(1546123, origin = "2019-09-15 12:15:00")
د لبریډیټ کڅوړې په کارولو سره د نیټو سره کار کول
lubridate
شاید په R ژبه کې د نیټو سره کار کولو لپاره خورا مشهور کڅوړه. دا تاسو ته درې اضافي ټولګي چمتو کوي.
- موده - موده، د بیلګې په توګه د دوو وختونو تر منځ د ثانیو شمیر؛
- دوره - دورې تاسو ته اجازه درکوي چې د نیټو تر مینځ د انسان د لوستلو وړ وقفو کې محاسبه وکړئ: ورځې، میاشتې، اونۍ، او داسې نور؛
- وقفې - هغه شیان چې په وخت کې د پیل او پای ټکی چمتو کوي.
په R ژبه کې د اضافي کڅوړو نصب کول د معیاري فنکشن په کارولو سره ترسره کیږي install.packages()
.
د کڅوړې نصب کول lubridate
:
install.packages("lubridate")
د لبریډیټ په کارولو سره متن نیټې ته بدل کړئ
د بسته بندۍ ځانګړتیاوې lubridate
د متن په تاریخ کې د بدلولو پروسه د پام وړ ساده کړئ، او تاسو ته اجازه درکوي چې د نیټې او وختونو سره هر ډول ریاضي عملیات ترسره کړئ.
دندې به تاسو سره د اوسني نیټه یا نیټه او وخت ترلاسه کولو کې مرسته وکړي today()
и now()
.
today() # текущая дата
now() # текущая дата и время
په تاریخ کې تار بدلولو لپاره lubridate
د دندو ټوله کورنۍ شتون لري چې نومونه یې تل له دریو حروفو څخه جوړ شوي، او د نیټې اجزاو ترتیب په ګوته کوي:
- y - کال
- m - میاشت
- d - ورځ
د لبریډیټ له لارې نیټې ته متن بدلولو لپاره د دندو لیست
ymd()
ydm()
mdy()
myd()
dmy()
dym()
yq()
تاریخ ته د تارونو بدلولو لپاره ځینې مثالونه:
ymd("2017 jan 21")
mdy("March 20th, 2019")
dmy("1st april of 2018")
څنګه چی ته ګوری lubridate
دا د متن په توګه د نیټې توضیحاتو په پیژندلو کې خورا ډیر اغیزمن دی، او تاسو ته اجازه درکوي چې متن په نیټې بدل کړئ پرته له دې چې د فارمیټ تشریح کولو لپاره اضافي آپریټرونه وکاروي.
د لبریډیټ کڅوړې په کارولو سره د نیټې برخې استخراج کول
هم کارول lubridate
تاسو کولی شئ د نیټې څخه کوم برخه ترلاسه کړئ:
dt <- ymd("2017 jan 21")
year(dt) # год
month(dt) # месяц
mday(dt) # день в месяце
yday(dt) # день в году
wday(dt) # день недели
د نیټو سره ریاضي عملیات
مګر ترټولو مهم او بنسټیز فعالیت lubridate
د نیټو سره د مختلف ریاضیاتي عملیاتو ترسره کولو وړتیا ده.
د نیټې ګردي کول د دریو دندو لخوا ترسره کیږي:
floor_date
- نږدې تیر وخت ته راګرځولceiling_date
- د نږدې راتلونکي زمانې ته راګرځولround_date
- نږدې وخت ته راګرځول
د دې دندو هر یو دلیل لري واحدکوم چې تاسو ته اجازه درکوي د ګردي واحد مشخص کړئ: دویمه، دقیقه، ساعت، ورځ، اونۍ، میاشت، دوه میاشتې، ربع، فصل، نیم کال، کال
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") # округлить до полугодия
نو راځئ چې معلومه کړو چې څنګه یوه نیټه ترلاسه کړو چې د اوسني نیټې څخه 8 ورځې وروسته وي او د دواړو نیټو ترمینځ مختلف حسابي محاسبې ترسره کړئ.
today() + days(8) # какая дата будет через 8 дней
today() - months(2) # какая дата была 2 месяца назад
today() + weeks(12) # какая дата будет через 12 недель
today() - years(2) # какая дата была 2 года назад
د دورې، د وخت دورې آر پیکج سره ساده کار.
timeperiodsR
- د نیټو سره د کار کولو لپاره یو نوی کڅوړه چې په سپتمبر 2019 کې په CRAN کې خپره شوې.
د کڅوړې نصب کول timeperiodsR
:
install.packages("timeperiodsR")
اصلي موخه دا ده چې ژر تر ژره د یوې ټاکلې نیټې سره سم یو ټاکلی وخت وقفه وټاکي. د مثال په توګه، د دې دندو په کارولو سره تاسو کولی شئ په اسانۍ سره:
- په R کې تیره اونۍ، میاشت، ربع یا کال ترلاسه کړئ.
- د نیټې په پرتله د وخت وقفې مشخص شمیر ترلاسه کړئ، د بیلګې په توګه تیرې 4 اونۍ.
- دا اسانه ده چې د پایلې د وخت وقفې څخه د هغې برخې راوباسئ: د پیل او پای نیټه، د ورځو شمیر چې په وقفه کې شامل دي، د نیټې ټول ترتیب چې پدې کې شامل دي.
د بسته بندۍ د ټولو دندو نوم timeperiodsR
هوښيار دي او دوه برخې لري: لور_وقفهچیرته:
- لور په کوم کې چې تاسو اړتیا لرئ د یوې ټاکلې نیټې پورې اړوند حرکت وکړئ: وروستی_n، پخوانی، دا، راتلونکی، راتلونکی_n.
- لنډمهاله وقفه د دورې محاسبه کول: ورځ، اونۍ، میاشت، ربع، کال.
بشپړ فیچر سیټ:
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()
د وخت وقفې په وخت کې R
دا دندې په هغو قضیو کې ګټورې دي چیرې چې تاسو اړتیا لرئ د تیرې اونۍ یا میاشتې معلوماتو پراساس راپورونه جوړ کړئ. د تیرې میاشتې ترلاسه کولو لپاره، د ورته نوم فعالیت وکاروئ previous_month()
:
prmonth <- previous_month()
له هغې وروسته به تاسو یو اعتراض ولرئ میاشت کلونه tprله کوم څخه چې لاندې برخې په اسانۍ سره ترلاسه کیدی شي:
- د دورې د پیل نیټه، زموږ په مثال کې دا وروستۍ میاشت ده
- د دورې پای نیټه
- په موده کې د شاملو ورځو شمیر
- په دوره کې د نیټو سلسله شامله ده
برسېره پردې، تاسو کولی شئ هره برخه په مختلفو لارو ترلاسه کړئ:
# первый день периода
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") # количество дней в периоде
نو راځئ چې د بسته بندۍ په دندو کې موجود ټول دلیلونه وګورو timeperiodsR
:
x
- د حوالې نیټه چې له هغې څخه د وخت موده محاسبه کیږي، د ډیفالټ اوسنی نیټه؛n
- د وقفو شمیر چې په موده کې به شامل شي، د بیلګې په توګه تیرې 3 اونۍ؛part
- د څيز کومه برخهtpr
تاسو اړتیا لرئ چې په ډیفالټ ترلاسه کړئall
;week_start
- استدلال یوازې د اونیو سره د کار کولو لپاره په دندو کې شتون لري، او تاسو ته اجازه درکوي د اونۍ د ورځې شمیره وټاکئ چې د هغې پیل ګڼل کیږي. 1 - دوشنبه تر 7 - یکشنبه.
په دې توګه، تاسو کولی شئ د اوسني یا کومې بلې نیټې په اړه د هرې مودې موده محاسبه کړئ؛ دلته یو څو نور مثالونه دي:
# получить 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 پورې اړوند به تیرې 3 اونۍ وخت ونیسي. د اونۍ په شمول نه چې د اکتوبر 6 پخپله پکې شامل وي. په دې اساس، دا د سپتمبر له 9 څخه تر سپتمبر 29 پورې موده ده.
# получить месяц отстающий на 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
په دې مثال کې، موږ په هغه میاشت کې لیوالتیا لرو چې 4 میاشتې مخکې وه، که موږ د سپتمبر 16، 2019 څخه پیل کړو، نو دا د می 2019 وه.
د وخت دورې په کارولو سره د نیټو ویکتور فلټر کول
د نیټې فلټر کولو لپاره timeperiodsR
ډیری چلونکي شتون لري:
- %left_out٪ - دوه tpr ټولګي توکي پرتله کوي، او د کیڼ اړخ څخه ارزښت بیرته راګرځوي چې په ښي خوا کې ورک دی.
- %left_in٪ - د tpr ټولګي دوه شیان پرتله کوي، او د کیڼ څیز څخه نیټې بیرته راګرځوي کوم چې په ښي اړخ کې شامل دي.
- %right_out٪ - دوه tpr ټولګي توکي پرتله کوي، او د ښي اړخ څخه ارزښت بیرته راګرځوي چې له کیڼ څخه ورک دی.
- %right_in٪ - د tpr ټولګي دوه شیان پرتله کوي، او د ښي څیز څخه نیټې بیرته راګرځوي چې په کیڼ اړخ کې شتون لري.
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
په کڅوړه کې timeperiodsR
دلته رسمي، روسي ژبه ده
پایلې
موږ د شیانو ټولګي په تفصیل سره معاینه کړل چې د نیټې سره کار کولو لپاره په R ژبه کې ډیزاین شوي. همدا اوس تاسو کولی شئ په نیټو کې ریاضي عملیات ترسره کړئ، او د بسته بندۍ په کارولو سره هر وخت وخت په چټکۍ سره ترلاسه کړئ timeperiodsR
.
که تاسو د R ژبې سره علاقه لرئ، زه تاسو ته بلنه درکوم چې زما د ټیلیګرام چینل کې ګډون وکړئ
سرچینه: www.habr.com