ملخصات المجموعات
جزء من قسم المنطق وتدفق التنفيذ في رحلة 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"التحدي
سهلأكمل 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")
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1السلاسل النصية بعمق
السلاسل الفرعية باستخدام substr()التنسيق باستخدام sprintf()التقسيم والضمالبحث في السلاسل النصيةاستبدال النصوصمراجعة - منشئ اسم المستخدم4المصفوفات
إنشاء المصفوفاتفهرسة المصفوفاتملخصات الصفوف والأعمدةالحساب على المصفوفاتمراجعة - مخطط المقاعد2استرجاع القيم باستخدام المفاتيح
البحث في المتجهات المُسمّاةالتحقق من المفاتيحإضافة المفاتيح وإزالتهاالتكرار عبر الأسماءمراجعة - مكتب الأسهم8الفرز والتجميع
فرز المتجهاتالفرز حسب مفتاحالتجميع باستخدام split()ملخصات المجموعاتمراجعة - لوحة المتصدرينتدرّب بنفسك: مترجم R عبر الإنترنت