الفهرسة المنطقية
جزء من قسم Fundamentals في رحلة R على Coddy — الدرس 68 من 78.
بدلاً من تحديد مواضع دقيقة، يمكنك استخدام متجه منطقي (logical vector) لاختيار العناصر. تتيح لك هذه التقنية، التي تسمى الفهرسة المنطقية (logical indexing)، تصفية متجه بناءً على شروط بدلاً من المواضع.
عندما تقوم بتطبيق مقارنة على متجه (vector)، فإن لغة R تعيد متجهاً منطقياً (logical vector) بنفس الطول:
numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)المخرجات:
[1] FALSE FALSE TRUE TRUE TRUEيمكنك استخدام هذا المتجه المنطقي مباشرة داخل الأقواس المربعة لاستخراج العناصر المطابقة:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])المخرجات:
[1] 30 40 50يحتفظ R فقط بالعناصر التي يكون فيها المتجه المنطقي TRUE. هذا النهج أنظف بكثير من كتابة الحلقات (loops) لتصفية البيانات. يمكنك دمج الشروط باستخدام العمليات المنطقية:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])الناتج:
[1] 20 30 40تعد الفهرسة المنطقية واحدة من أقوى ميزات لغة R لمعالجة البيانات، حيث تتيح لك تصفية مجموعات البيانات باستخدام تعبيرات بسيطة وسهلة القراءة.
التحدي
سهلستتلقى سطرين من المدخلات:
- قائمة من الأرقام مفصولة بفاصلة (على سبيل المثال،
15,42,8,67,23,91,34,12,56) - قيمتان للعتبة (threshold) مفصولتان بفاصلة تمثلان نطاقاً (على سبيل المثال،
20,60)
باستخدام الفهرسة المنطقية (logical indexing):
- أنشئ متجهاً رقمياً (numeric vector) من الأرقام المفصولة بفاصلة
- استخرج واطبع جميع العناصر التي هي أقل من العتبة الأولى (الحد الأدنى)
- استخرج واطبع جميع العناصر التي هي أكبر من العتبة الثانية (الحد الأقصى)
- استخرج واطبع جميع العناصر التي تقع ضمن النطاق (أكبر من أو تساوي العتبة الأولى وَ أقل من أو تساوي العتبة الثانية)
على سبيل المثال، إذا كانت المدخلات هي:
5,25,10,45,60,15,80,35,50
20,50يجب أن تكون المخرجات:
[1] 5 10 15
[1] 60 80
[1] 25 45 35 50التفسير:
- العناصر الأقل من 20: 5، 10، 15
- العناصر الأكبر من 50: 60، 80
- العناصر بين 20 و 50 (شاملة): 25، 45، 35، 50
استخدم المعامل & لدمج الشروط لفلترة النطاق.
ورقة مرجعية
تسمح لك الفهرسة المنطقية بتصفية متجه بناءً على شروط بدلاً من المواقع. عندما تقوم بتطبيق مقارنة على متجه، فإن لغة R تعيد متجهاً منطقياً:
numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)
# المخرجات: [1] FALSE FALSE TRUE TRUE TRUEاستخدم المتجه المنطقي داخل الأقواس المربعة لاستخراج العناصر المطابقة:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])
# المخرجات: [1] 30 40 50قم بدمج الشروط باستخدام المعاملات المنطقية مثل & (AND):
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])
# المخرجات: [1] 20 30 40جرّب بنفسك
# قراءة المدخلات
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
thresholds_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# تحليل الأرقام المفصولة بفاصلة إلى متجه عددي
numbers <- as.numeric(unlist(strsplit(numbers_input, ",")))
# تحليل قيم العتبة
thresholds <- as.numeric(unlist(strsplit(thresholds_input, ",")))
lower_bound <- thresholds[1]
upper_bound <- thresholds[2]
# TODO: اكتب الكود الخاص بك أدناه
# 1. استخدم الفهرسة المنطقية لاستخراج العناصر الأصغر من lower_bound وقم بطباعتها
# 2. استخدم الفهرسة المنطقية لاستخراج العناصر الأكبر من upper_bound وقم بطباعتها
# 3. استخدم الفهرسة المنطقية مع عامل الربط & لاستخراج العناصر ضمن النطاق (بما في ذلك الحدود) وقم بطباعتهايتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Fundamentals
4المعاملات - الجزء الثاني
المعاملات المنطقية (AND, OR)المعاملات المنطقية - الجزء الثاني (NOT)مراجعة - المنطق البسيطالمنطق المتجهي - الجزء الأولالمنطق المتجهي - الجزء الثاني7حاسبة تقسيم الفاتورة
رسالة الترحيبالحصول على مدخلات المستخدم13المتجهات المتقدمة
تقطيع وفهرسة المتجهاتالفهرسة المنطقيةالعمليات الحسابية وإعادة تدوير المتجهاتالمعامل %in%2المتغيرات وأنواع البيانات
نوع البيانات الرقمينوع البيانات الصحيحنوع البيانات الحرفينوع البيانات المنطقيالتحقق من أنواع البياناتقواعد التسميةالقيم المفقودة: NAملخص - إنشاء المتغيرات8الحلقات التكرارية
حلقة Forحلقة Whileجملة Breakجملة Next (Continue)مراجعة - المضروب (Factorial)توليد المتتاليات (seq, :)الحلقات المتداخلةمراجعة - الإدخال الديناميكي (Dynamic Input)3المعاملات - الجزء الأول
المعاملات الحسابيةقسمة الأعداد الصحيحة وباقي القسمةمعاملات الإسنادملخص - عمليات رياضية بسيطةمعاملات المقارنة6أساسيات الإدخال والإخراج
طباعة المخرجاتاستخدام Cat للمخرجاتالمخرجات مع المتغيراتقراءة المدخلات باستخدام readline()أساسيات تحويل أنواع البياناتمراجعة - حاسبة العمرمراجعة - صح أم خطأ