التجميع باستخدام split()
جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 39 من 64.
تضع split(values, groups) كل قيمة في المجموعة التي يسمّيها العنصر المطابق لها في groups. والنتيجة قائمة تضم عنصرًا واحدًا لكل مجموعة، وتُسمّى العناصر بأسماء المجموعات بترتيب تصاعدي:
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
by_cat <- split(amounts, category)
print(names(by_cat))
print(by_cat[["food"]])الناتج:
[1] "food" "fun" "rent"
[1] 10 30اجمع بين split() وsapply() لحساب ملخص واحد لكل مجموعة:
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
by_cat <- split(amounts, category)
print(sapply(by_cat, sum))
print(sapply(by_cat, length))الناتج:
food fun rent
40 40 20
food fun rent
2 1 1 يمكن أن تكون القيم نصوصًا أيضًا، مثلًا لتجميع الأسماء حسب الحرف الأول منها:
names <- c("ana", "bo", "al", "bea", "cy")
groups <- split(names, substr(names, 1, 1))
for (letter in names(groups)) {
cat(letter, ":", paste(groups[[letter]], collapse = ", "), "\n")
}الناتج:
a : ana, al
b : bo, bea
c : cy لا توجد مجموعة إلا إذا كانت تحتوي على قيمة واحدة على الأقل، لذا تحقّق باستخدام %in% names() قبل قراءة مجموعة قد تكون فارغة:
by_cat <- split(c(5, 7), c("food", "food"))
print("rent" %in% names(by_cat))المخرجات:
[1] FALSEالتحدي
سهلأكمل category_totals(amounts, categories). أعد سطرًا واحدًا لكل فئة بالترتيب الأبجدي، food: 40 (2 items)، يتضمن إجمالي المبلغ وعدد المبالغ في تلك الفئة.
يقرأ الكود المقدَّم المبالغ والفئات في سطرين مفصولين بفواصل ومتساويين في الطول، ويطبع كل سطر مُعاد.
جرّب بنفسك
category_totals <- function(amounts, categories) {
# اكتب الكود الخاص بك هنا
character(0)
}
# كود الإدخال والإخراج المقدَّم: اتركه كما هو
input <- suppressWarnings(readLines(file("stdin")))
cat(category_totals(as.numeric(strsplit(input[1], ",")[[1]]), strsplit(input[2], ",")[[1]]), sep = "\n")
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1السلاسل النصية بعمق
السلاسل الفرعية باستخدام substr()التنسيق باستخدام sprintf()التقسيم والضمالبحث في السلاسل النصيةاستبدال النصوصمراجعة - منشئ اسم المستخدم4المصفوفات
إنشاء المصفوفاتفهرسة المصفوفاتملخصات الصفوف والأعمدةالحساب على المصفوفاتمراجعة - مخطط المقاعد2استرجاع القيم باستخدام المفاتيح
البحث في المتجهات المُسمّاةالتحقق من المفاتيحإضافة المفاتيح وإزالتهاالتكرار عبر الأسماءمراجعة - مكتب الأسهم8الفرز والتجميع
فرز المتجهاتالفرز حسب مفتاحالتجميع باستخدام split()ملخصات المجموعاتمراجعة - لوحة المتصدرينتدرّب بنفسك: مترجم R عبر الإنترنت