Szymon Skarbek, Cyryl Ufnał
Task 1 Gather
library(tidyr)
set.seed(13)
# 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 = "points",
-student_id,
-name,
na.rm = FALSE,
convert = FALSE,
factor_key = FALSE
)
# Print first few rows:
head(student_data_long)
## student_id name exam type points
## 1 1 Student1 midterm1 83
## 2 2 Student2 midterm1 62
## 3 3 Student3 midterm1 96
## 4 4 Student4 midterm1 69
## 5 5 Student5 midterm1 72
## 6 6 Student6 midterm1 65
Task 2 Separate
set.seed(12)
# 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_wider_delim(student_data2, name_age, "_", names = c("name", "age"))
# Split variables exam_scores to separate columns for each exam type
student_data2 <- separate_wider_delim(student_data2, exam_scores, ",", names = c("midterm_1", "midterm_2", "final"))
student_data2 <- separate_wider_delim(student_data2, midterm_1, "_", names = c("midterm_1", "m1_points"))
student_data2 <- separate_wider_delim(student_data2, midterm_2, "_", names = c("midterm_2", "m2_points"))
student_data2 <- separate_wider_delim(student_data2, final, "_", names = c("final", "f_points"))
# Transform student_data2 to long format
head(student_data2)
## # A tibble: 6 × 9
## student_id name age midterm_1 m1_points midterm_2 m2_points final f_points
## <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 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 Micha… 22 midterm1 85 midterm2 86 final 88
## 6 6 John 21 midterm1 80 midterm2 85 final 75
Task 3 Complete
library(tidyr)
set.seed(13)
# 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
student_complete <- complete(student_data, fill = list(), explicit = TRUE)
head(student_complete)
## 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
Task 4 Spread
library(tidyr)
library(dplyr)
##
## Dołączanie pakietu: 'dplyr'
## Następujące obiekty zostały zakryte z 'package:stats':
##
## filter, lag
## Następujące obiekty zostały zakryte z 'package:base':
##
## intersect, setdiff, setequal, union
set.seed(14)
# 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(name_age, into = c("name", "age"), sep = "_") %>%
separate(exam_scores, into = c("midterm1", "midterm2", "final"), sep = ",")
head(student_data)
## student_id name age midterm1 midterm2 final
## 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
Task 5 Unite
library(tidyr)
# 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
student_data2_merge <- student_data2 %>% unite("name-age", name:age, sep = "-")
head(student_data2_merge)
## # A tibble: 6 × 8
## student_id `name-age` midterm_1 m1_points midterm_2 m2_points final f_points
## <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 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