Menu
CoddyTech

التجميع باستخدام 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
challenge icon

التحدي

سهل

أكمل 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")
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم R عبر الإنترنت