צירוף נתונים עם dplyr
שיעור 8 מתוך 14 בקורס מניפולציה של נתונים ב-R של Coddy.
צירוף נתונים הוא פעולה חיונית בעיבוד נתונים, המאפשרת לשלב כמה מסגרות נתונים על סמך עמודות משותפות. חבילת dplyr ב-R מספקת פונקציות יעילות לסוגים שונים של צירופים. בואו נבחן את פעולות הצירוף העיקריות: צירוף פנימי, צירוף שמאלי, צירוף ימני וצירוף מלא.
1. הכנת נתונים
ראשית, ניצור שתי מסגרות נתונים לדוגמה כדי להדגים פעולות צירוף:
# טען את dplyr
library(dplyr)
# צור מסגרות נתונים לדוגמה
employees <- data.frame(
emp_id = c(1, 2, 3, 4),
name = c("Alice", "Bob", "Charlie", "David"),
department = c("HR", "IT", "Finance", "IT")
)
salaries <- data.frame(
emp_id = c(1, 2, 3, 5),
salary = c(50000, 60000, 55000, 65000)
)2. צירוף פנימי
צירוף פנימי מחזיר רק את השורות שבהן יש ערכים תואמים בשתי מסגרות הנתונים:
inner_join_result <- inner_join(employees, salaries, by = "emp_id")
print(inner_join_result)פלט:
emp_id name department salary
1 1 Alice HR 50000
2 2 Bob IT 60000
3 3 Charlie Finance 550003. צירוף שמאלי
צירוף שמאלי מחזיר את כל השורות ממסגרת הנתונים השמאלית ואת השורות התואמות ממסגרת הנתונים הימנית:
left_join_result <- left_join(employees, salaries, by = "emp_id")
print(left_join_result)פלט:
emp_id name department salary
1 1 Alice HR 50000
2 2 Bob IT 60000
3 3 Charlie Finance 55000
4 4 David IT NA4. צירוף ימני
צירוף ימני מחזיר את כל השורות ממסגרת הנתונים הימנית ואת השורות התואמות ממסגרת הנתונים השמאלית:
right_join_result <- right_join(employees, salaries, by = "emp_id")
print(right_join_result)פלט:
emp_id name department salary
1 1 Alice HR 50000
2 2 Bob IT 60000
3 3 Charlie Finance 55000
4 5 <NA> <NA> 650005. צירוף מלא
צירוף מלא מחזיר את כל השורות שבהן קיימת התאמה במסגרת הנתונים השמאלית או הימנית:
full_join_result <- full_join(employees, salaries, by = "emp_id")
print(full_join_result)פלט:
emp_id name department salary
1 1 Alice HR 50000
2 2 Bob IT 60000
3 3 Charlie Finance 55000
4 4 David IT NA
5 5 <NA> <NA> 650006. ציון עמודות הצירוף
אם שמות העמודות שונים בשתי מסגרות הנתונים, אפשר לציין במפורש את עמודות הצירוף:
# בהנחה שב-'salaries' יש 'employee_id' במקום 'emp_id'
salaries_alt <- salaries %>% rename(employee_id = emp_id)
join_result <- inner_join(employees, salaries_alt, by = c("emp_id" = "employee_id"))
print(join_result)7. הוספת עמודות חדשות
הוספה או שינוי של עמודות באמצעות mutate() הפונקציה mutate() ב-dplyr מאפשרת להוסיף עמודות חדשות או לשנות עמודות קיימות במסגרת נתונים. משתמשים בה לעיתים קרובות לאחר פעולות צירוף כדי לבצע חישובים או טרנספורמציות בנתונים שצורפו:
שימוש בסיסי:
result <- data_frame %>% mutate(new_column = calculation)דוגמה:
# הוסף עמודת בונוס לנתונים שאוחדו
result_with_bonus <- inner_join(employees, salaries, by = "emp_id") %>%
mutate(bonus = salary * 0.1)אפשר גם להשתמש ב-mutate() כדי לבצע חישובים מורכבים יותר או להשתמש בלוגיקה מותנית:
# הוסף קטגוריית ביצועים על סמך השכר
result_with_category <- inner_join(employees, salaries, by = "emp_id") %>%
mutate(performance_category = ifelse(salary < 55000, "Needs Improvement",
ifelse(salary < 60000, "Meets Expectations",
"Exceeds Expectations")))השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
אתגר
קלצרו פונקציה שמבצעת סדרה של פעולות צירוף על שתי מסגרות נתונים המכילות מידע על ספרים ועל הדירוגים שלהם. הפונקציה צריכה:
- לבצע צירוף פנימי כדי לשלב ספרים עם הדירוגים שלהם
- לבצע צירוף שמאלי כדי לכלול את כל הספרים, גם את אלה שאין להם דירוגים
- לבצע צירוף ימני כדי לכלול את כל הדירוגים, גם עבור ספרים שאינם ברשימת הספרים
- לבצע צירוף מלא כדי לכלול את כל הספרים ואת כל הדירוגים
- לחשב ולהוסיף עמודה של מספר הדירוגים לכל תוצאת צירוף
- להחזיר רשימה המכילה את כל ארבע תוצאות הצירוף
נסו בעצמכם
# קראו את כל שורות הקלט
con <- file("stdin", "r")
all_lines <- suppressWarnings(readLines(con))
# מצאו את האינדקס שבו מתחילה טבלת הנתונים השנייה
separator_index <- which(grepl("^book_id,rating,user_id", all_lines))
# פצלו את הקלט לשני חלקים
books_data <- all_lines[1:(separator_index - 1)]
ratings_data <- all_lines[separator_index:length(all_lines)]
# טענו את הספרייה הנדרשת
suppressPackageStartupMessages(library(dplyr))
# המירו את מחרוזות הקלט לטבלאות נתונים
books <- read.csv(text = paste(books_data, collapse = "\n"), stringsAsFactors = FALSE)
ratings <- read.csv(text = paste(ratings_data, collapse = "\n"), stringsAsFactors = FALSE)
# TODO: כתבו את הקוד שלכם למטה
# בצעו את פעולות הצירוף והחישובים הנדרשים
# פונקציה לביצוע פעולות צירוף
perform_joins <- function(books, ratings) {
# הקוד שלכם כאן
# החזירו רשימה המכילה את התוצאות של כל ארבע פעולות הצירוף
list(
inner_join = NULL,
left_join = NULL,
right_join = NULL,
full_join = NULL
)
}
# קראו לפונקציה ושמרו את התוצאות
results <- perform_joins(books, ratings)
# הדפיסו את התוצאות
print(results)כל השיעורים ביחידה מניפולציה של נתונים ב-R
תרגלו בעצמכם: קומפיילר R אונליין