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