Menu
Coddy logo textTech

סינון שורות

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-R של Coddy. שיעור 44 מתוך 64.

וקטור לוגי עם ערך אחד לכל שורה בוחר את השורות שבהן הערך הוא TRUE. הציבו אותו לפני הפסיק והשאירו את צד העמודות ריק כדי להשאיר את כל העמודות:

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
print(people[people$age > 30, ])
print(nrow(people[people$age > 30, ]))

פלט:

  name age   city
1  ada  36 london
3   cy  41   rome
[1] 2

שלבו תנאים באמצעות & (שניהם) ו-| (אחד מהם). כל חלק משווה עמודה שלמה, ולכן התוצאה עדיין מכילה ערך אחד לכל שורה:

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
print(people[people$age > 30 & people$city == "london", ])
print(people$name[people$age < 25 | people$city == "rome"])

פלט:

  name age   city
1  ada  36 london
[1] "bo" "cy"

subset(df, condition) עושה את אותו הדבר באמצעות קוד קצר יותר, כי בתוכה אפשר להשתמש ישירות בשמות העמודות:

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
older <- subset(people, age > 30)
print(older$name)

פלט:

[1] "ada" "cy" 

כשאף שורה לא תואמת, התוצאה היא מסגרת נתונים עם 0 שורות, לכן בדקו את nrow() לפני שקוראים ממנה:

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
nobody <- people[people$age > 90, ]
print(nrow(nobody))
print(if (nrow(nobody) == 0) "none" else nobody$name[1])

פלט:

[1] 0
[1] "none"
challenge icon

אתגר

קל

השלימו את adults_in(df, city). ב-df יש את העמודות name, age ו-city. החזירו את השמות של האנשים שגילם לפחות 18 והם גרים ב-city, לפי סדר השורות ומופרדים באמצעות , , או none.

הקוד שסופק קורא את הטבלה מהקלט באמצעות read.csv(text = input): בשורה הראשונה מופיעים שמות העמודות, וכל שורה שאחריה היא שורה אחת, עם ערכים המופרדים בפסיקים. בשורת הקלט האחרונה מופיעה העיר, והקוד מדפיס את הערך שהוחזר.

נסו בעצמכם

adults_in <- function(df, city) {
  # כתבו את הקוד שלכם כאן
  "none"
}

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

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

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

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