סיכומי קבוצות
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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: ואחריו את העיר עם הממוצע הגבוה ביותר (הראשונה בסדר אלפביתי במקרה של ממוצעים שווים).
הקוד שסופק קורא את שמות הערים ואת הטמפרטורות כשתי שורות המופרדות בפסיקים ובעלות אורך זהה, ומדפיס כל שורה שמוחזרת.
נסו בעצמכם
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מטריצות
יצירת מטריצותאינדוקס מטריצותסיכומי שורות ועמודותאריתמטיקה של מטריצותסיכום – תרשים מקומות ישיבהתרגלו בעצמכם: קומפיילר R אונליין