ספירה באמצעות table()
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-R של Coddy. שיעור 15 מתוך 64.
table(x) סופרת כמה פעמים כל ערך מופיע. התוצאה נקראת על שם הערכים, הממוינים בסדר אלפביתי, ולכן מספר הפעמים שערך מופיע הוא t[["value"]]:
votes <- c("tea", "coffee", "tea", "juice", "tea")
t <- table(votes)
print(t[["tea"]])
print(names(t))
print(as.vector(t))פלט:
[1] 3
[1] "coffee" "juice" "tea"
[1] 1 1 3sort(t, decreasing = TRUE) מסדרת את הספירות מהגבוהה לנמוכה. which.max(t) מחזירה את המיקום של הספירה הגדולה ביותר; כשיש תיקו בין הספירות, היא בוחרת את הראשונה, כלומר את הערך הראשון בסדר אלפביתי:
votes <- c("tea", "coffee", "tea", "juice", "coffee")
t <- table(votes)
print(names(t)[which.max(t)])
print(max(t))פלט:
[1] "coffee"
[1] 2ערך שאינו מופיע אף פעם לא נמצא בטבלה כלל, לכן בדקו באמצעות %in% names(t) לפני קריאתו:
t <- table(c("A", "B", "A"))
for (grade in c("A", "B", "C")) {
n <- if (grade %in% names(t)) t[[grade]] else 0
cat(grade, n, "\n")
}פלט:
A 2
B 1
C 0 גם table() סופרת מספרים וערכים לוגיים. כדי לספור ערך יחיד, sum(x == value) קצרה יותר מבניית טבלה:
rolls <- c(6, 2, 6, 6, 1)
print(sum(rolls == 6))
print(table(rolls > 3)[["TRUE"]])פלט:
[1] 3
[1] 3אתגר
קלהשלם את vote_winner(votes). החזר את האפשרות שקיבלה את מספר הקולות הגבוה ביותר, ואחריה את מספר הקולות שלה, כמו ב־tea (3 votes). אם יש שוויון בין אפשרויות, החזר את זו שמופיעה ראשונה בסדר האלפביתי.
הקוד שסופק קורא את הקולות בשורה המופרדת בפסיקים ומדפיס את הערך שהוחזר.
נסו בעצמכם
vote_winner <- function(votes) {
# כתבו כאן את הקוד שלכם
""
}
# קוד הקלט/פלט שסופק: השאירו אותו כפי שהוא
input <- suppressWarnings(readLines(file("stdin")))
cat(vote_winner(strsplit(input[1], ",")[[1]]), sep = "\n")
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מחרוזות לעומק
תת־מחרוזות עם substr()עיצוב עם sprintf()פיצול וחיבורחיפוש במחרוזותהחלפת טקסטסיכום – בונה שמות משתמש4מטריצות
יצירת מטריצותאינדוקס מטריצותסיכומי שורות ועמודותאריתמטיקה של מטריצותסיכום – תרשים מקומות ישיבהתרגלו בעצמכם: קומפיילר R אונליין