Menu
Coddy logo textTech

צירוף נתונים עם 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  55000

3. צירוף שמאלי

צירוף שמאלי מחזיר את כל השורות ממסגרת הנתונים השמאלית ואת השורות התואמות ממסגרת הנתונים הימנית:

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     NA

4. צירוף ימני

צירוף ימני מחזיר את כל השורות ממסגרת הנתונים הימנית ואת השורות התואמות ממסגרת הנתונים השמאלית:

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>  65000

5. צירוף מלא

צירוף מלא מחזיר את כל השורות שבהן קיימת התאמה במסגרת הנתונים השמאלית או הימנית:

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>  65000

6. ציון עמודות הצירוף

אם שמות העמודות שונים בשתי מסגרות הנתונים, אפשר לציין במפורש את עמודות הצירוף:

# בהנחה שב-'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")))
quiz iconבחנו את עצמכם

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

quiz iconבחנו את עצמכם

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

quiz iconבחנו את עצמכם

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

challenge icon

אתגר

קל

צרו פונקציה שמבצעת סדרה של פעולות צירוף על שתי מסגרות נתונים המכילות מידע על ספרים ועל הדירוגים שלהם. הפונקציה צריכה:

  1. לבצע צירוף פנימי כדי לשלב ספרים עם הדירוגים שלהם
  2. לבצע צירוף שמאלי כדי לכלול את כל הספרים, גם את אלה שאין להם דירוגים
  3. לבצע צירוף ימני כדי לכלול את כל הדירוגים, גם עבור ספרים שאינם ברשימת הספרים
  4. לבצע צירוף מלא כדי לכלול את כל הספרים ואת כל הדירוגים
  5. לחשב ולהוסיף עמודה של מספר הדירוגים לכל תוצאת צירוף
  6. להחזיר רשימה המכילה את כל ארבע תוצאות הצירוף

נסו בעצמכם

# קראו את כל שורות הקלט
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 אונליין