السلسلات و المتجهات
سنهتم في هذا المقال بتقديم أولى بُنى المعلومات الأساسية المعتمدة في آر و ذلك بعد أن قدمنا أشكالا بسيطة للمعطيات و المتغيرات في المقال السابق. سنتعرض هنا إلى المتجهات Vectors لكن في البداية ، سنبتدئ ببعض أشكال المتتاليات الحسابية و سلسلات البيانات.
1. سلسلات البيانات
طبعا ، يهتم أر بالأساس بالعمل على البيانات و تحليلها و لذا فهو يهتم بتخزين سلسلات للمعطيات المختلفة. قبل البدء بمختلف أشكال الصفائف (متجهات ، مصفوفات) سنتطرق إلى أشكال بسيطة لسلسلات المعطيات.
هذا مثال لسلسلة بسيطة من الأرقام من 0 إلى 10.
0:10
# [1] 0 1 2 3 4 5 6 7 8 9 10
يمكن خزنه في متغير sequence
بحيث :
sequence <- 0:10
print(sequence) #أمر الطبع وقد تطرقنا إليه في درس مضى
# [1] 0 1 2 3 4 5 6 7 8 9 10
نجد كذلك الأمر seq()
والذي يسمح لنا بالحصول على سلسلات أعداد بأساس محدد تكتب بالصيغة التالية :
seq(0,20,by=2)
# [1] 0 2 4 6 8 10 12 14 16 18 20
يمكن كذلك تكرار معطى رقمي أو حرفي في سلسلة معينة عبر استعمال الوظيفة rep()
بوسيطتين ، الأولى هب المعطى المكرر و الثانية هي مقدار أو عدد التكرار.
مثال :
rep(5,10)
# 5 هو العدد المكرر و 10 هو مقدار التكرار. النتيجة هنا في الأسفل
# [1] 5 5 5 5 5 5 5 5 5 5
rep("bayany",5) # تكرار سلسلة حروف بياني 5 مرات
#[1] "Bayany" "Bayany" "Bayany" "Bayany" "Bayany"
2. المتجهات (Vectors)
المتجه هو مجموعة مرتبة من معطيات من النفس الطبيعة القاعدية. قد تكون رقمية ، حرفية أو منطقية ، بولية (Boulean). تدرج بواسطة الأمر التالي : c(قيمة1,قيمة2,قيمة3,...)
. هنا أمثلة بسيطة :
v1 <- c(2,3,5,12,11,10)#numeric vector متجه رقمي
v2 <- c("أبجد","هوز","حطي","كلمن","سعفص","قرشت")#character حرفي
v3 <- c(TRUE,FALSE,FALSE,TRUE,TRUE,FALSE) #logical منطقي
#عرض المتجهات
v1 #[1] 2 3 5 12 11 10
v2 #[1] "أبجد" "هوز" "حطي" "كلمن" "سعفص" "قرشت"
v3 #TRUE FALSE FALSE TRUE TRUE FALSE
يمكن أن يتشكل المتجه من معطيات على شكل متجهات. أنظر المثال الآتي :
v4 <- c(v1,v2,v3)
v4
#[1] "2" "3" "5" "12" "11" "10" "أبجد" "هوز" "حطي"
#[10] "كلمن" "سعفص" "قرشت" "TRUE" "FALSE" "FALSE" "TRUE" "TRUE" "FALSE"
2.1. العمليات على المتجهات
يمكن إجراء عمليات حسابية على متجهات من طبيعة رقمية أو منطقية سواءا بين متجهين v1+v2, v1-v2, v1*v2, v1/v2
أو بين متجه و عدد v1+n, v1-n, v1*n, v1/n
.
2.1.1. أمثلة عن العمليات الحسابية على المتجهات الرقمية
في البداية ، سندخل معطيات المتجهين v1 و v2 :
#إدخال معطيات المتجه
v1 <- c(3,4)
v2 <- c(3,9)
سنكتب أوامر إجراء عمليات حسابية على المتجهين متبوعة بعرض النتيجة :
عملية جمع المتجهين v1 ، v2 مع النتيجة :
v1+v2
#[1] 6 13
عملية طرح المتجه v2 من v1 مع النتيجة :
v1-v2
#[1] 0 -5
عملية ضرب المتجهين v1 ، v2 مع النتيجة :
v1*v2
#[1] 9 36
عملية قسمة المتجه v1 على v2 مع النتيجة :
v1/v2
#[1] 1.0000000 0.4444444
هنا بعض أمثلة عمليات حسابية بين متجه و عدد على المتجهين السابقين v1 و v2 :
جمع متجه و عدد
v1+4
#[1] 7 8
قسمة متجه على عدد
v2/3
#[1] 1 3
طرح عدد من متجه
v1-6
#[1] -3 -2
ضرب متجه بعدد
v1*12
#[1] 36 48
2.1.2. أمثلة عن العمليات الحسابية بين متجهات منطقية
يمكن كذلك إجراء عمليات على متجهات منطقية أو بين متجهات منطقية و عددية. في هاته الحالة تعتبر قيم المتجه المنطقي أعدادا طبيعية حيث TRUE = 1
و FALSE = 0
.
جرب الأمثلة التالية على المتجهين المنطقيين v3 و v4 :
إدخال معطيات المتجهين المنطقيين v3 و v4 :
v3 <- c(T,F,T) # يمكن على آر اختصار العبارات المنطقية بحرفها الأول : T(TRUE), F(FALSE)
v4 <- c(F,F,T)
عملية متجهين
جمع المتجهين v3 و v4 متبوعة بالنتيجة:
v3+v4
#[1] 1 0 2
ضرب المتجهين v3 و v4 متبوعة بالنتيجة:
v3*v4
#[1] 0 0 1
طرح المتجه v4 من v3 متبوعة بالنتيجة:
v3-v4
#[1] 1 0 0
قسمة المتجه v3 على v4 متبوعة بالنتيجة:
v3/v4
#[1] Inf NaN 1
عملية متجه و عدد
هنا تكتب العبارة متبوعة بنتيجتها على آر : جمع المتجه v3 و العدد 2 متبوعة بالنتيجة:
v3+2
#[1] 3 2 3
طرح العدد 1 من المتجه v3 متبوعة بالنتيجة:
v4-1
#[1] -1 -1 0
ضرب المتجه v3 و العدد 2 متبوعة بالنتيجة:
v3*2
#[1] 2 0 2
قسمة المتجه v3 على العدد 3 متبوعة بالنتيجة:
v4/3
#[1] 0.0000000 0.0000000 0.3333333
2.2. استخراج معطيات من متجهات
لاستخراج معطيات من متجهات ، نستخدم عادة ترتيب المعطى المقصود في المتجه باعتماد الصيغة التالية : المتجه[الترتيب]
.
في آر ، يتم الترتيب انطلاقا من الرقم 1 عكس برامج أخرى مثل بايثون أين الترتيب ينطلق من 0.
هذا المثال لمتجه يحمل معطيات معدلات طلبة قسم جامعي. أدرجناها في متجه اسمه grades
.
grades <- c(13.26, 12.97, 13.05, 11.35, 10.87, 10.25, 11.85, 4.84, 12.57, 6.97, 10.44, 3.45, 11.55, 12.03, 11.53)
سننجز مجموعة عمليات على هذا المتجه لاستخراج علامات لطلبة مختلفين.
طول المتجه
أولا ، يجب معرفة طول المتجه ، أي عدد القيم الموجودة به. نستعمل هنا الصيغة length()
#1. استخراج طول المتجه
length(grades) #[1] 15
استخراج بعض المعطيات المكونة للمتجه
ثانيا ، سنحاول الحصول على استخراج بعض معدلات الطلبة حسب ما يلي :
- استخراج معدل الطالب رقم 5 و عرض النتيجة :
# استخراج معدل الطالب 5
grades[5]
#[1] 10.87
- استخراج معدلات الطلبة من 6 إلى 10 و حفظها في متجه جديد
grades_susbset1
باستعمال صيغة المجالgrades[6:10]
:
# استخراج متجهات الطلبة من 6 إلى 10 و حفظها في متجه جديد.
grades_subset1 <- grades[6:10]
grades_subset1
#[1] 10.25 11.85 4.84 12.57 6.97
- ثم في الأخير ، استخراج معدلات الطلبة
2 ، 4 و 6
و حفظها في متجه جديدgrades_susbset2
. هنا تحدد القيم المطلوبة بالصيغة التالية :grades[c(2,4,6)]
#استخراج متجهات الطلبة 2 ، 4 و 6 و حفظها في متجه جديد
grades_subset2 <- grades[c(2,4,6)]
grades_subset2
#[1] 12.97 11.35 10.25
الحصول على معطيات إحصائية من المتجه
هناك إمكانيات كثيرة لاستخراج معطيات من المتجهات ستجدونها في التوثيق و لكن يمكن شرح بعضها. سنستمر بالعمل على المتجه السابق grades
:
- الترتيب عبر تعليمة
order(vector, decreasing = T)
. هذا الأمر يعطينا ترتيبا تصاعديا أو تنازليا لكل قيمة. يمكن تحديد وسيطة تبين اتجاه الترتيب ، متصاعدا أم متنازلا :
order(grades,decreasing = T) # decreasing = TRUE
# [1] 1 3 2 9 14 7 13 15 4 5 11 6 10 8 12
order(grades) # الترتيب الأصلي تصاعدي ، أي decreasing = FALSE
# [1] 12 8 10 6 11 5 4 15 13 7 14 9 2 3 1
- عكس اتجاه المتجه عبر تعليمة
rev(vector)
و هذه التعليمة تعكس ترتيب قيم المتجه الأصلي.
rev(grades)
# [1] 11.53 12.03 11.55 3.45 10.44 6.97 12.57 4.84 11.85 10.25 10.87 11.35
# [13] 13.05 12.97 13.26
- الحصول على معلومات إحصائية حول المتجه : هنا نبدأ في الحصول على معلومات ذات طبيعة إحصائية. يمكن الحصول على المجموع عبر أمر
sum(vector)
القيمة الأعلى (المعدل الأعلى) عبر أمرmax(vector)
أو الأدنىmin(vector)
أو المعدلmean(vector)
أو الوسيطmedian(vector)
أو الانحراف المعياري Standard deviationsd(vector)
. يمكن كذلك الحصول على مجموعة كاملة من المعلومات الإحضائية عبر الأمرsummary(grades)
.
سنجرب كل هذا على متجهنا grades
:
المجموع sum()
sum(grades)
#[1] 156.98
القيمة الأعلى max()
max(grades)
#[1] 10.46533
القيمة الأدنى min()
min(grades)
#[1] 3.45
المعدل mean()
mean(grades)
#[1] 10.46533
الوسيط median()
median(grades)
#[1] 11.53
الانحراف المعياري sd()
sd(grades)
#[1] 2.999276
الملخص الإحصائي sumamry()
summary(grades)
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 3.45 10.35 11.53 10.47 12.30 13.26
نلاحظ أننا بهذا نستطيع إجراء تحليل بسيط لبيانات توزيع لمعدلات الطلبة انطلاقا من متجه على آر.
2.3. إضافة قيم جديدة لمتجه
لسبب ما ، قد نحتاج إلى إضافة معطيات أو قيم جديدة لمتجه بيانات ما. فرضا مثلا أن لدينا هذا المتجه s_office
الذي يحوي مساحات المكاتب في أحد الأبنية المكتبية:
s_office<- c(13,20,15,00,20,00,14.62,18.12,15)
length(s_office) #[1] 9
اتضح أن هناك مكاتب لم تُحسب و يجب إدراجها في هذا المتجه. لهذا الغرض ، سنضيفها له و سنتبع لهذا الغرض طريقتين.
الطريقة الأولى عبر إدخال متجه جديد s_office2
به قيم المكاتب الإضافية
s_office2<-c(10.12, 8.50, 21.05)
ندمج المتجهين s_office
و s_office2
في متجه جديد Surf_Office
يحوي كل المساحات المكتبية :
Surf_Office<- c(s_office, s_office2)
Surf_Office #[1] 13.00 20.00 15.00 0.00 20.00 0.00 14.62 18.12 15.00 10.12 8.50 21.05
الطريقة الثانية، عبر إضافة القيم الجديدة إلى المتجه الأول مباشرة و نحفظها في متجه جديد هو Surf_Office1
ندرج المتجه الأول كقيمة في المتجه النهائي و نضيف عليها مباشرة القيم المتبقية.
Surf_Office1 <-c(s_office, 10.12, 8.50, 21.05)
Surf_Office1 #[1] 13.00 20.00 15.00 0.00 20.00 0.00 14.62 18.12 15.00 10.12 8.50 21.05
من أجل التأكد من صحة الطريقتين ، يمكننا مقارنة المتجهين Surf_Office
و Surf_Office1
باستعمال الأمر identical()
:
identical(Surf_Office, Surf_Office1)
#[1] TRUE
2.4. تغيير أو تصحيح قيمة أو مجموعة قيم بعينها
قد نضطر كذلك لتغيير قيمة معينة متجه أو تصحيحها. هنا يمكن أن نستعمل خاصية إيجاد القيمة حسب ترتيبها ثم وضع القيم الجديدة مكان القديمة وفق الأمر التالي:
Surf_Office[1] <-12.00
Surf_Office[1]#[1] 12
يمكن أن تكون الكتابة بالطريقة التالية :
11->Surf_Office[2]
Surf_Office[2]#[1] 11
تغيير مجموعة قيم
بنفس الطريقة يمكن تغيير مجموعة قيم باستعمال صيغة المجال [value2:value1]
.
Surf_Office[3:5]<-c(13.21,10.98,21.02)
Surf_Office[3:5]#[1] 13.21 10.98 21.02
أو بتحديد متجه من القيم المرغوب تغييرها :
Surf_Office[c(7,9)]#[1] 14.62 15.00
Surf_Office[c(7,9)] <- c(08.21,17.15)
Surf_Office[c(7,9)]#[1] 8.21 17.15
خلاصة
في هذا المقال ، تعرضنا إلى كيفية إدراج متجهات على آر ثم كيفية إجراء عمليات عليها و كيفيات استخراج معلومات منها، بما فيها الحصول على قيم إحصائية تخصها و كذا في النهاية كيفية تغييرها أو تصحيحها.