كيفية تجميع البيانات اليومية إلى بيانات شهرية وسنوية في r
في بعض الأحيان قد ترغب في تجميع البيانات اليومية إلى بيانات أسبوعية أو شهرية أو سنوية في R.
يشرح هذا البرنامج التعليمي كيفية القيام بذلك بسهولة باستخدام حزمتي lubridate و dplyr .
مثال: تجميع البيانات اليومية في R
لنفترض أن لدينا إطار البيانات التالي في R الذي يوضح المبيعات اليومية لأحد العناصر على مدى 100 يوم متتالي:
#make this example reproducible set.seed(1) #create data frame df <- data.frame(date = as.Date (" 2020-12-01 ") + 0:99, sales = runif (100, 20, 50)) #view first six rows head(df) dirty date 1 2020-12-01 27.96526 2 2020-12-02 31.16372 3 2020-12-03 37.18560 4 2020-12-04 47.24623 5 2020-12-05 26.05046 6 2020-12-06 46.95169
لتجميع هذه البيانات، يمكننا استخدام الدالة Floor_date() لحزمة lubridate التي تستخدم الصيغة التالية:
floor_date (x, unit)
ذهب:
- x: متجه لكائنات التاريخ.
- الوحدة: وحدة زمنية للتقريب إليها. تشمل الخيارات الثواني والدقائق والساعات والأيام والأسابيع والأشهر ونصف الشهرية والأرباع ونصف السنة والسنوات.
توضح مقتطفات التعليمات البرمجية التالية كيفية استخدام هذه الوظيفة مع وظائف group_by() و Summary() في حزمة dplyr للعثور على متوسط المبيعات حسب الأسبوع والشهر والسنة:
متوسط المبيعات في الأسبوع
library (lubridate)
library (dplyr)
#round dates down to week
df$week <- floor_date (df$date, " week ")
#find average sales per week
df %>%
group_by (week) %>%
summarize (mean = mean (sales))
# A tibble: 15 x 2
week means
1 2020-11-29 33.9
2 2020-12-06 35.3
3 2020-12-13 39.0
4 2020-12-20 34.4
5 2020-12-27 33.6
6 2021-01-03 35.9
7 2021-01-10 37.8
8 2021-01-17 36.8
9 2021-01-24 32.8
10 2021-01-31 33.9
11 2021-02-07 34.1
12 2021-02-14 41.6
13 2021-02-21 31.8
14 2021-02-28 35.2
15 2021-03-07 37.1
متوسط المبيعات شهريا
library (lubridate)
library (dplyr)
#round dates down to week
df$month <- floor_date (df$date, " month ")
#find average sales by month
df %>%
group_by (month) %>%
summarize (mean = mean (sales))
# A tibble: 4 x 2
month mean
1 2020-12-01 35.3
2 2021-01-01 35.6
3 2021-02-01 35.2
4 2021-03-01 37.0
متوسط المبيعات سنويا
library (lubridate)
library (dplyr)
#round dates down to week
df$year <- floor_date (df$date, " year ")
#find average sales by month
df %>%
group_by (year) %>%
summarize (mean = mean (sales))
# A tibble: 2 x 2
year means
1 2020-01-01 35.3
2 2021-01-01 35.7
لاحظ أننا نختار التجميع حسب المتوسط، ولكن يمكننا استخدام أي إحصائية ملخصة نريدها، مثل المتوسط، والوضع، والحد الأقصى، والحد الأدنى، وما إلى ذلك.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية تنفيذ المهام الشائعة الأخرى في R:
كيفية حساب المتوسط لكل مجموعة في R
كيفية حساب المبالغ التراكمية في R
كيفية رسم سلسلة زمنية في R