טיפול בנתונים חסרים
שיעור 11 מתוך 14 בקורס מניפולציה של נתונים ב-R של Coddy.
ערכים חסרים מיוצגים בדרך כלל בתור <strong>NA</strong> (לא זמין). בואו נבחן אסטרטגיות לזיהוי ערכים חסרים, להסרתם ולהשלמתם.
זיהוי נתונים חסרים
כדי לבדוק אם יש ערכים חסרים ב-R, אפשר להשתמש בפונקציות הבאות:
# בדקו אם ערך הוא NA
is.na(x)
# ספרו ערכי NA בווקטור
sum(is.na(x))
# זהו שורות המכילות לפחות ערך NA אחד במסגרת נתונים
complete.cases(df)הסרת נתונים חסרים
אפשר להסיר שורות עם ערכים חסרים באמצעות השיטות הבאות:
# הסר שורות שמכילות ערכי NA
df_clean <- na.omit(df)
# שימוש ב-dplyr להסרת שורות עם ערכי NA בעמודות מסוימות
library(dplyr)
df_clean <- df %>% filter(!is.na(column_name))השלמת נתונים חסרים
השלמת ערכים חסרים כרוכה בהחלפתם בערכים משוערים. הנה כמה שיטות נפוצות להשלמת ערכים חסרים:
# השלמת ערכים חסרים באמצעות הממוצע
df$column[is.na(df$column)] <- mean(df$column, na.rm = TRUE)
# השלמת ערכים חסרים באמצעות החציון
df$column[is.na(df$column)] <- median(df$column, na.rm = TRUE)
# השלמת ערכים חסרים בנתונים קטגוריאליים באמצעות השכיח
mode_value <- names(sort(table(df$category), decreasing = TRUE))[1]
df$category[is.na(df$category)] <- mode_valueהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
אתגר
בינוניצרו פונקציה שמעבדת מערך נתונים המכיל מידע על מטופלים ועל תוצאות הבדיקות הרפואיות שלהם. הפונקציה צריכה לבצע את הפעולות הבאות:
- להמיר את מחרוזת הקלט למסגרת נתונים
- לזהות ולספור את מספר הערכים החסרים בכל עמודה
- להסיר שורות עם ערכים חסרים בעמודות 'age' או 'test_result'
- להשלים ערכים חסרים בעמודה 'blood_pressure' באמצעות ערך החציון
- ליצור עמודה חדשה 'status' על סמך 'test_result':
- אם test_result חסר, להגדיר את status ל-"Unknown"
- אם test_result קטן מ-50, להגדיר את status ל-"Normal"
- אם test_result שווה ל-50 או גדול ממנו, להגדיר את status ל-"Elevated"
- להדפיס את המידע הבא:
- מספר הערכים החסרים בכל עמודה לפני העיבוד
- מספר השורות שהוסרו
- חציון לחץ הדם ששימש להשלמת הערכים החסרים
- מסגרת הנתונים שעובדה
נסו בעצמכם
# קראו את הקלט
con <- file("stdin", "r")
input_string <- suppressWarnings(readLines(con))
# המירו את מחרוזת הקלט למסגרת נתונים
data <- read.csv(text = input_string, stringsAsFactors = FALSE)
# TODO: כתבו את הקוד שלכם למטה
# 1. זהו וספרו ערכים חסרים
# 2. הסירו שורות עם ערכים חסרים ב-'age' או ב-'test_result'
# 3. השלימו ערכים חסרים ב-'blood_pressure'
# 4. צרו עמודה בשם 'status'
# 5. הדפיסו את המידע הנדרש
# מציין מקום לפלט
cat("Missing values in each column before processing:\n")
print(missing_counts)
cat("\nNumber of rows removed:\n")
print(rows_removed)
cat("\nMedian blood pressure used for imputation:\n")
print(median_bp)
cat("\nProcessed data:\n")
print(data_clean)כל השיעורים ביחידה מניפולציה של נתונים ב-R
תרגלו בעצמכם: קומפיילר R אונליין