Menu
Coddy logo textTech

ספירה באמצעות 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 3

sort(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
challenge icon

אתגר

קל

השלם את vote_winner(votes). החזר את האפשרות שקיבלה את מספר הקולות הגבוה ביותר, ואחריה את מספר הקולות שלה, כמו ב־tea (3 votes). אם יש שוויון בין אפשרויות, החזר את זו שמופיעה ראשונה בסדר האלפביתי.

הקוד שסופק קורא את הקולות בשורה המופרדת בפסיקים ומדפיס את הערך שהוחזר.

נסו בעצמכם

vote_winner <- function(votes) {
  # כתבו כאן את הקוד שלכם
  ""
}

# קוד הקלט/פלט שסופק: השאירו אותו כפי שהוא
input <- suppressWarnings(readLines(file("stdin")))
cat(vote_winner(strsplit(input[1], ",")[[1]]), sep = "\n")
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר R אונליין