التجميع باستخدام 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 عبر الإنترنت