עמודות ושורות
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-R של Coddy. שיעור 43 מתוך 64.
df$col ו־df[["col"]] מחזירים עמודה בתור וקטור רגיל, כך שכל פונקציות הווקטורים פועלות עליה. [[ ]] מקבל שם של עמודה ששמור במשתנה:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people$age)
print(mean(people$age))
col <- "city"
print(people[[col]])פלט:
[1] 36 22 41
[1] 33
[1] "london" "paris" "rome" סוגריים מרובעים מקבלים את הצורה [row, column], כמו במטריצה. צד ריק בוחר הכול, ואפשר לבחור עמודות לפי שם:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people[2, ])
print(people[, c("name", "city")])פלט:
name age city
2 bo 22 paris
name city
1 ada london
2 bo paris
3 cy romeתא אחד הוא df[row, column], והשמה אליו משנה את הערך. השמה לעמודה שלמה פועלת באותו אופן:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people[3, "age"])
people[3, "age"] <- 42
people$city <- toupper(people$city)
print(people)פלט:
[1] 41
name age city
1 ada 36 LONDON
2 bo 22 PARIS
3 cy 42 ROMEכדי לעבור על השורות בזו אחר זו, בצע לולאה על seq_len(nrow(df)) וקרא כל תא באמצעות df[i, "col"] או df$col[i]:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
for (i in seq_len(nrow(people))) {
cat(people$name[i], "lives in", people[i, "city"], "\n")
}פלט:
ada lives in london
bo lives in paris
cy lives in rome אתגר
קלהשלימו את person_card(df, i). החזירו שורה אחת לכל עמודה בשורה i, name: bo, ובה שם העמודה והערך שבשורה זו, לפי סדר העמודות.
הקוד שסופק קורא את הטבלה מהקלט באמצעות read.csv(text = input): השורה הראשונה מכילה את שמות העמודות, וכל שורה שאחריה היא שורה אחת, עם ערכים המופרדים בפסיקים. שורת הקלט האחרונה מכילה את i, והקוד מדפיס כל שורה שהוחזרה.
נסו בעצמכם
person_card <- function(df, i) {
# כתבו כאן את הקוד שלכם
character(0)
}
# קוד קלט/פלט שסופק: השאירו אותו כפי שהוא
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input[-length(input)])
i <- as.numeric(input[length(input)])
cat(person_card(df, i), sep = "\n")
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מחרוזות לעומק
תת־מחרוזות עם substr()עיצוב עם sprintf()פיצול וחיבורחיפוש במחרוזותהחלפת טקסטסיכום – בונה שמות משתמש4מטריצות
יצירת מטריצותאינדוקס מטריצותסיכומי שורות ועמודותאריתמטיקה של מטריצותסיכום – תרשים מקומות ישיבהתרגלו בעצמכם: קומפיילר R אונליין