הוספה ומיון
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-R של Coddy. שיעור 45 מתוך 64.
הקצאה לשם עמודה חדש מוסיפה את העמודה. פעולות חשבון בין עמודות מתבצעות שורה אחר שורה, כמו בכל פעולת חשבון וקטורית:
orders <- data.frame(item = c("tea", "jam", "oil"), qty = c(2, 5, 1), price = c(4, 2.5, 9))
orders$total <- orders$qty * orders$price
print(orders)פלט:
item qty price total
1 tea 2 4.0 8.0
2 jam 5 2.5 12.5
3 oil 1 9.0 9.0df[order(df$col), ] ממיין את השורות לפי עמודה. מספרי השורות משמאל נשארים צמודים לשורות המקוריות. השתמשו בסימן מינוס או ב-decreasing = TRUE כדי למיין מהגבוה לנמוך, ובמפתח שני כדי לשבור שוויון:
orders <- data.frame(item = c("tea", "jam", "oil"), qty = c(2, 5, 1), price = c(4, 2.5, 9))
orders$total <- orders$qty * orders$price
print(orders[order(-orders$total, orders$item), c("item", "total")])פלט:
item total
2 jam 12.5
3 oil 9.0
1 tea 8.0עמודה חדשה יכולה להיות טקסט שנבנה מעמודות אחרות. sprintf() פועלת על עמודות שלמות בבת אחת:
orders <- data.frame(item = c("tea", "jam"), qty = c(2, 5), price = c(4, 2.5))
orders$label <- sprintf("%d x %s", orders$qty, orders$item)
print(orders$label)פלט:
[1] "2 x tea" "5 x jam"rbind() מוסיפה שורה ממסגרת נתונים בת שורה אחת, בעלת אותן עמודות, ו-head(df, n) משאירה את n השורות הראשונות:
orders <- data.frame(item = c("tea", "jam"), qty = c(2, 5))
orders <- rbind(orders, data.frame(item = "oil", qty = 1))
print(nrow(orders))
print(head(orders[order(-orders$qty), ], 2))פלט:
[1] 3
item qty
2 jam 5
1 tea 2אתגר
קלהשלם את order_totals(df). ל-df יש את העמודות item, qty ו-price. הוסף עמודת total (כמות כפול מחיר), מיין את השורות לפי הסכום מהגבוה לנמוך (פריטים עם סכומים זהים ימוינו בסדר אלפביתי), והחזר שורה אחת לכל שורה, jam: 12.50, כשהסכום מוצג בשתי ספרות אחרי הנקודה.
הקוד שסופק קורא את הטבלה מהקלט באמצעות read.csv(text = input): השורה הראשונה מכילה את שמות העמודות, וכל שורה שאחריה היא שורה אחת, כשהערכים מופרדים בפסיקים. הקוד מדפיס כל שורה שהוחזרה.
נסו בעצמכם
order_totals <- function(df) {
# כתבו כאן את הקוד שלכם
character(0)
}
# קוד קלט/פלט שסופק: השאירו אותו כפי שהוא
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input)
cat(order_totals(df), sep = "\n")
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מחרוזות לעומק
תת־מחרוזות עם substr()עיצוב עם sprintf()פיצול וחיבורחיפוש במחרוזותהחלפת טקסטסיכום – בונה שמות משתמש4מטריצות
יצירת מטריצותאינדוקס מטריצותסיכומי שורות ועמודותאריתמטיקה של מטריצותסיכום – תרשים מקומות ישיבהתרגלו בעצמכם: קומפיילר R אונליין