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