احصل على التاريخ الحالي بأي لغة برمجة ، وهي عملية تعادل "Hello world!" اللغة R ليست استثناء.
في هذه المقالة ، سننظر في كيفية عمل التواريخ في بناء جملة R الأساسي ، وسننظر أيضًا في بعض الحزم المفيدة التي تعمل على توسيع إمكانياتها عند العمل مع التواريخ:
lubridate
- حزمة تسمح بالحسابات الحسابية بين التواريخ ؛timeperiodsR
- حزمة للعمل مع الفواصل الزمنية ومكوناتها.

محتوى
- العمل مع التواريخ في بناء جملة R الأساسي
1.1. تحويل النص إلى تاريخ
1.2. استرداد مكونات التاريخ في Base R - العمل مع التمور مع حزمة lubridate
2.1. تحويل النص إلى تاريخ باستخدام تزييت
2.2. استرداد مكونات التاريخ باستخدام حزمة lubridate
2.3. العمليات الحسابية مع التواريخ - العمل المبسط مع فترات ، حزمة timeperiodsR
3.1. فترات زمنية في timeperiodsR
3.2. تصفية متجه التاريخ مع timeperiodsR - استنتاج
العمل مع التواريخ في بناء جملة R الأساسي
تحويل النص إلى تاريخ
في R الأساسية هناك مجموعة من الوظائف للعمل مع التواريخ. ناقص بناء الجملة الأساسي هو أن سجل أسماء وسيطات الوظائف مجزأ للغاية ، وليس له أي اتصال منطقي عمليًا. ومع ذلك ، يجب أن تكون الوظائف الأساسية للغة معروفة ، لذلك سنبدأ بها.
في معظم الأحيان ، عند تحميل البيانات إلى R ، من ملفات CSV ، أو مصادر أخرى ، تحصل على التاريخ في شكل نص. as.Date()
هذا النص إلى نوع البيانات الصحيح ، استخدم الدالة 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")
يقبل التنسيق في معاملات نموذج سلسلة تدل على أي فاصل زمني وتنسيقه ، وتظهر القيم الأكثر استخدامًا في الجدول أدناه:
وفقًا لذلك ، "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")
استرداد مكونات التاريخ في Base R
لا توجد وظائف كثيرة في R الأساسية تسمح لك باستخراج أي جزء من التاريخ من كائن من فئة Date .
current_date <- Sys.Date() # weekdays(current_date) # months(current_date) # quarters(current_date) #
بالإضافة إلى الفئة الرئيسية لكائنات 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()
إلى تنسيقات POSIX * بواسطة الدالتين 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
ربما lubridate
الحزمة الأكثر شعبية للعمل مع التواريخ في R. وهي توفر لك ثلاثة فصول إضافية.
- فترات - المدة ، أي عدد الثواني بين طوابع زمنية ؛
- فترات - تسمح لك الفترات بإجراء عمليات حسابية بين تواريخ الفواصل الزمنية القابلة للقراءة البشرية: الأيام والشهور والأسابيع وما إلى ذلك ؛
- الفواصل الزمنية - الكائنات التي توفر النقطة الأولية والنهائية في الوقت المناسب.
يتم إجراء تثبيت حزم إضافية في اللغة R بواسطة install.packages()
الدالة القياسية.
تثبيت الحزمة lubridate
:
install.packages("lubridate")
تحويل النص إلى تاريخ باستخدام تزييت
تعمل وظائف حزمة lubridate
تبسيط عملية تحويل النص إلى تاريخ بشكل كبير ، كما تتيح لك تنفيذ أي عمليات حسابية بالتواريخ والأوقات.
ستساعدك الوظائف today()
now()
الحصول على التاريخ أو التاريخ والوقت الحاليين.
today() # now() #
لتحويل سلسلة إلى تاريخ ، تحتوي مجموعة lubridate
على مجموعة كاملة من الوظائف التي تتكون أسماؤها دائمًا من ثلاثة أحرف ، وتشير إلى سلسلة من مكونات التاريخ:
قائمة وظائف لتحويل النص إلى تاريخ عبر lubridateymd()
ydm()
mdy()
myd()
dmy()
dym()
yq()
بعض الأمثلة لتحويل السلاسل إلى التواريخ:
ymd("2017 jan 21") mdy("March 20th, 2019") dmy("1st april of 2018")
كما ترى ، فإن lubridate
أكثر فاعلية في التعرف على أوصاف التاريخ في شكل نص ، ويسمح لك بتحويل النص إلى تاريخ دون استخدام عوامل تشغيل إضافية لوصف التنسيق.
استرداد مكونات التاريخ باستخدام حزمة 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.
timeperiodsR
هي حزمة جديدة للعمل مع التواريخ التي تم نشرها على CRAN في سبتمبر 2019.
تثبيت حزمة timeperiodsR
:
install.packages("timeperiodsR")
الغرض الرئيسي هو تحديد فاصل زمني معين بسرعة بالنسبة إلى تاريخ معين. على سبيل المثال ، باستخدام وظائفها ، يمكنك بسهولة:
- الحصول على الأسبوع الماضي أو الشهر أو الربع أو السنة في R.
- احصل على عدد معين من الفواصل الزمنية المتعلقة بالتاريخ ، مثل الأسابيع الأربعة الأخيرة.
- من السهل استخراج مكوناته من الفاصل الزمني الذي تم الحصول عليه: تاريخ البدء والانتهاء ، وعدد الأيام التي تقع في الفاصل الزمني ، وتسلسل التواريخ الكامل الذي يدخل فيه.
اسم جميع وظائف حزمة timeperiodsR
بديهية ، وتتكون من جزأين: direction _ interval ، حيث:
- الاتجاه الذي من الضروري التحرك فيه بالنسبة إلى تاريخ محدد: last_n ، السابق ، هذا ، التالي ، next_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()
فترات زمنية في timeperiodsR
هذه الوظائف مفيدة عندما تحتاج إلى إنشاء تقارير تستند إلى بيانات من الأسبوع الماضي أو الشهر الماضي. للحصول على الشهر الماضي ، استخدم وظيفة بنفس الاسم previous_month()
:
prmonth <- previous_month()
بعد ذلك سيكون لديك كائن prprth من فئة 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 أكتوبر. لا يشمل أسبوع 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
هناك العديد من العوامل لتصفية التواريخ في 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
استنتاج
درسنا بالتفصيل فئات الكائنات التي تم تصميمها في لغة R للعمل مع التواريخ. يمكنك الآن أيضًا إجراء العمليات الحسابية في التواريخ ، والحصول بسرعة على أي فترات زمنية باستخدام حزمة timeperiodsR
.
إذا كنت مهتمًا بلغة R ، فأنا أدعوك للاشتراك في قناة R4marketing الخاصة بي ، حيث أشارك يوميًا مواد مفيدة حول استخدام لغة R في حل المهام اليومية.