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

ملخصات المجموعات

جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 40 من 64.

tapply(values, groups, f) تجمع القيم وتطبّق f على كل مجموعة في استدعاء واحد. وتعطي النتيجة نفسها مثل sapply(split(values, groups), f):

amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
print(tapply(amounts, category, sum))
print(tapply(amounts, category, max))

الناتج:

food  fun rent 
  40   40   20 
food  fun rent 
  30   40   20 

تُسمّى النتيجة حسب المجموعة بترتيب مُرتَّب، لذا تقرأ [[ ]] مجموعةً واحدة، وتعرض names() أسماءها:

amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
avg <- tapply(amounts, category, mean)
print(avg[["food"]])
print(names(avg))

الناتج:

[1] 20
[1] "food" "fun"  "rent"

يمكن أن تكون دالة التلخيص من إنشائك. وهي هنا تحسب الطلبات التي تتجاوز 25 في كل مجموعة:

amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
print(tapply(amounts, category, function(v) sum(v > 25)))

الناتج:

food  fun rent 
   1    1    0 

النتيجة هي متجه مُسمّى، لذا يجد sort() وwhich.max() أكبر مجموعة. يُرجع which.max() أول قيمة من القيم المتساوية:

amounts <- c(10, 20, 30, 40, 5)
category <- c("food", "rent", "food", "fun", "rent")
totals <- tapply(amounts, category, sum)
print(names(totals)[which.max(totals)])
print(names(sort(totals, decreasing = TRUE)))

المخرجات:

[1] "food"
[1] "food" "fun"  "rent"
challenge icon

التحدي

سهل

أكمل city_report(cities, temps). أعد سطرًا واحدًا لكل مدينة بالترتيب الأبجدي، مثل oslo: avg 4.5, max 9، بحيث تكون درجة الحرارة المتوسطة مقربة إلى منزلة عشرية واحدة، مع أعلى درجة حرارة. ثم أضف Warmest: متبوعًا بالمدينة ذات أعلى متوسط (والمدينة الأولى أبجديًا عند تساوي المتوسطات).

يقرأ الكود المُ provided المدن ودرجات الحرارة كسطرين مفصولين بفواصل ومتساويين في الطول، ويطبع كل سطر مُعاد.

جرّب بنفسك

city_report <- function(cities, temps) {
  # اكتب الكود الخاص بك هنا
  character(0)
}

# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
input <- suppressWarnings(readLines(file("stdin")))
cat(city_report(strsplit(input[1], ",")[[1]], as.numeric(strsplit(input[2], ",")[[1]])), sep = "\n")
quiz iconاختبر نفسك

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

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

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