Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

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