Data Wrangling report
R Markdown
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
# Data
student_data <- data.frame(
student_id = 1:50,
name = paste0("Student", 1:50),
midterm1 = sample(60:100, 50, replace = TRUE),
midterm2 = sample(60:100, 50, replace = TRUE),
final = sample(60:100, 50, replace = TRUE)
)
# Transform data to long format using gather:
student_data_long <- gather(student_data, key = "exam_type", value = "score", -student_id, -name)
# Print first few rows:
head(student_data_long)## student_id name exam_type score
## 1 1 Student1 midterm1 70
## 2 2 Student2 midterm1 62
## 3 3 Student3 midterm1 66
## 4 4 Student4 midterm1 89
## 5 5 Student5 midterm1 97
## 6 6 Student6 midterm1 61
# Data
student_data2 <- data.frame(
student_id = 1:50,
name_age = c("John_21", "Alice_20", "Bob_22", "Emily_23", "Michael_22"),
exam_scores = c("midterm1_80,midterm2_85,final_75", "midterm1_75,midterm2_78,final_80", "midterm1_82,midterm2_80,final_85", "midterm1_88,midterm2_90,final_92", "midterm1_85,midterm2_86,final_88")
)
# Split variables name_age to 2 separate columns: name and age
student_data2 <- separate(student_data2, name_age, into = c("name", "age"), sep = "_")
# Split variables exam_scores to separate columns for each exam type
student_data2 <- separate(student_data2, exam_scores, into = c("type1", "midterm1", "type2", "midterm2", "type3", "final"), sep = "(_|,)", convert = TRUE)
# Transform student_data2 to long format
student_data2_long <- pivot_longer(student_data2, cols = c(midterm1, midterm2, final),
names_to = "exam", values_to = "score")
student_data2_long <- student_data2_long[, -c(4, 5, 6)]
student_data2_long## # A tibble: 150 × 5
## student_id name age exam score
## <int> <chr> <chr> <chr> <int>
## 1 1 John 21 midterm1 80
## 2 1 John 21 midterm2 85
## 3 1 John 21 final 75
## 4 2 Alice 20 midterm1 75
## 5 2 Alice 20 midterm2 78
## 6 2 Alice 20 final 80
## 7 3 Bob 22 midterm1 82
## 8 3 Bob 22 midterm2 80
## 9 3 Bob 22 final 85
## 10 4 Emily 23 midterm1 88
## # ℹ 140 more rows
# Data
student_data <- data.frame(
student_id = 1:50,
name_age = c("John_21", "Alice_20", "Bob_22", "Emily_23", "Michael_22"),
exam_scores = c("midterm1_80,midterm2_85,final_75", "midterm1_75,midterm2_78,final_80", "midterm1_82,midterm2_80,final_85", "midterm1_88,midterm2_90,final_92", "midterm1_85,midterm2_86,final_88")
)
# Complete missing combinations for students
combinations <- complete(student_data, student_id, name_age, exam_scores)
combinations## # A tibble: 1,250 × 3
## student_id name_age exam_scores
## <int> <chr> <chr>
## 1 1 Alice_20 midterm1_75,midterm2_78,final_80
## 2 1 Alice_20 midterm1_80,midterm2_85,final_75
## 3 1 Alice_20 midterm1_82,midterm2_80,final_85
## 4 1 Alice_20 midterm1_85,midterm2_86,final_88
## 5 1 Alice_20 midterm1_88,midterm2_90,final_92
## 6 1 Bob_22 midterm1_75,midterm2_78,final_80
## 7 1 Bob_22 midterm1_80,midterm2_85,final_75
## 8 1 Bob_22 midterm1_82,midterm2_80,final_85
## 9 1 Bob_22 midterm1_85,midterm2_86,final_88
## 10 1 Bob_22 midterm1_88,midterm2_90,final_92
## # ℹ 1,240 more rows
# Data
student_data <- data.frame(
student_id = 1:50,
name_age = c("John_21", "Alice_20", "Bob_22", "Emily_23", "Michael_22"),
exam_scores = c("midterm1_80,midterm2_85,final_75", "midterm1_75,midterm2_78,final_80", "midterm1_82,midterm2_80,final_85", "midterm1_88,midterm2_90,final_92", "midterm1_85,midterm2_86,final_88")
)
# Transform data to wide format
student_data <- student_data %>%
separate_rows(exam_scores, sep = ",") %>%
separate(exam_scores, into = c("exam", "score"), sep = "_") %>%
pivot_wider(names_from = exam, values_from = score)
student_data## # A tibble: 50 × 5
## student_id name_age midterm1 midterm2 final
## <int> <chr> <chr> <chr> <chr>
## 1 1 John_21 80 85 75
## 2 2 Alice_20 75 78 80
## 3 3 Bob_22 82 80 85
## 4 4 Emily_23 88 90 92
## 5 5 Michael_22 85 86 88
## 6 6 John_21 80 85 75
## 7 7 Alice_20 75 78 80
## 8 8 Bob_22 82 80 85
## 9 9 Emily_23 88 90 92
## 10 10 Michael_22 85 86 88
## # ℹ 40 more rows
# Data
student_data <- data.frame(
student_id = 1:50,
name_age = c("John_21", "Alice_20", "Bob_22", "Emily_23", "Michael_22"),
exam_scores = c("midterm1_80,midterm2_85,final_75", "midterm1_75,midterm2_78,final_80", "midterm1_82,midterm2_80,final_85", "midterm1_88,midterm2_90,final_92", "midterm1_85,midterm2_86,final_88")
)
# Merge variables name and age to one column called name_age
#Data is already merged
student_data## student_id name_age exam_scores
## 1 1 John_21 midterm1_80,midterm2_85,final_75
## 2 2 Alice_20 midterm1_75,midterm2_78,final_80
## 3 3 Bob_22 midterm1_82,midterm2_80,final_85
## 4 4 Emily_23 midterm1_88,midterm2_90,final_92
## 5 5 Michael_22 midterm1_85,midterm2_86,final_88
## 6 6 John_21 midterm1_80,midterm2_85,final_75
## 7 7 Alice_20 midterm1_75,midterm2_78,final_80
## 8 8 Bob_22 midterm1_82,midterm2_80,final_85
## 9 9 Emily_23 midterm1_88,midterm2_90,final_92
## 10 10 Michael_22 midterm1_85,midterm2_86,final_88
## 11 11 John_21 midterm1_80,midterm2_85,final_75
## 12 12 Alice_20 midterm1_75,midterm2_78,final_80
## 13 13 Bob_22 midterm1_82,midterm2_80,final_85
## 14 14 Emily_23 midterm1_88,midterm2_90,final_92
## 15 15 Michael_22 midterm1_85,midterm2_86,final_88
## 16 16 John_21 midterm1_80,midterm2_85,final_75
## 17 17 Alice_20 midterm1_75,midterm2_78,final_80
## 18 18 Bob_22 midterm1_82,midterm2_80,final_85
## 19 19 Emily_23 midterm1_88,midterm2_90,final_92
## 20 20 Michael_22 midterm1_85,midterm2_86,final_88
## 21 21 John_21 midterm1_80,midterm2_85,final_75
## 22 22 Alice_20 midterm1_75,midterm2_78,final_80
## 23 23 Bob_22 midterm1_82,midterm2_80,final_85
## 24 24 Emily_23 midterm1_88,midterm2_90,final_92
## 25 25 Michael_22 midterm1_85,midterm2_86,final_88
## 26 26 John_21 midterm1_80,midterm2_85,final_75
## 27 27 Alice_20 midterm1_75,midterm2_78,final_80
## 28 28 Bob_22 midterm1_82,midterm2_80,final_85
## 29 29 Emily_23 midterm1_88,midterm2_90,final_92
## 30 30 Michael_22 midterm1_85,midterm2_86,final_88
## 31 31 John_21 midterm1_80,midterm2_85,final_75
## 32 32 Alice_20 midterm1_75,midterm2_78,final_80
## 33 33 Bob_22 midterm1_82,midterm2_80,final_85
## 34 34 Emily_23 midterm1_88,midterm2_90,final_92
## 35 35 Michael_22 midterm1_85,midterm2_86,final_88
## 36 36 John_21 midterm1_80,midterm2_85,final_75
## 37 37 Alice_20 midterm1_75,midterm2_78,final_80
## 38 38 Bob_22 midterm1_82,midterm2_80,final_85
## 39 39 Emily_23 midterm1_88,midterm2_90,final_92
## 40 40 Michael_22 midterm1_85,midterm2_86,final_88
## 41 41 John_21 midterm1_80,midterm2_85,final_75
## 42 42 Alice_20 midterm1_75,midterm2_78,final_80
## 43 43 Bob_22 midterm1_82,midterm2_80,final_85
## 44 44 Emily_23 midterm1_88,midterm2_90,final_92
## 45 45 Michael_22 midterm1_85,midterm2_86,final_88
## 46 46 John_21 midterm1_80,midterm2_85,final_75
## 47 47 Alice_20 midterm1_75,midterm2_78,final_80
## 48 48 Bob_22 midterm1_82,midterm2_80,final_85
## 49 49 Emily_23 midterm1_88,midterm2_90,final_92
## 50 50 Michael_22 midterm1_85,midterm2_86,final_88