lab3

Task 1, Transforming data into long format

set.seed(360)
library(tidyr)

# 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 = "test", value = "score", midterm1, midterm2, final)

# Print first few rows
head(student_data_long)
##   student_id     name     test score
## 1          1 Student1 midterm1    93
## 2          2 Student2 midterm1    67
## 3          3 Student3 midterm1    82
## 4          4 Student4 midterm1    80
## 5          5 Student5 midterm1    62
## 6          6 Student6 midterm1   100

Task 2, separating data and tranforming into long format

library(tidyr)

# 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, col = name_age, into = c("name", "age"), sep = "_")

# Split variables exam_scores to separate columns for each exam type
student_data2 <- separate(student_data2, col = exam_scores, into = c("midterm1","midterm2","final" ), sep = ",")
student_data2$midterm1 <- gsub("midterm1_", "", student_data2$midterm1)
student_data2$midterm2 <- gsub("midterm2_", "", student_data2$midterm2)
student_data2$final <- gsub("final_", "", student_data2$final)

# Transform student_data2 to long format
student_data2_long <- gather(student_data2, key = "test", value = "score", midterm1, midterm2, final)

head(student_data2_long)
##   student_id    name age     test score
## 1          1    John  21 midterm1    80
## 2          2   Alice  20 midterm1    75
## 3          3     Bob  22 midterm1    82
## 4          4   Emily  23 midterm1    88
## 5          5 Michael  22 midterm1    85
## 6          6    John  21 midterm1    80

Task 3, Completing missing combinations

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_data <- complete(student_data, student_id, name_age, exam_scores, fill = list(score = NA))
head(student_data)
## # A tibble: 6 × 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

Task 4, trasforming data into wide format

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")
)

# Transform data to wide format
student_data <- separate(student_data, col = name_age, into = c("name", "age"), sep = "_")
student_data <- separate(student_data, col = exam_scores, into = c("midterm1","midterm2","final" ), sep = ",")
student_data$midterm1 <- gsub("midterm1_", "", student_data$midterm1)
student_data$midterm2 <- gsub("midterm2_", "", student_data$midterm2)
student_data$final <- gsub("final_", "", student_data$final)
head(student_data)
##   student_id    name age midterm1 midterm2 final
## 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

Task 5, Merging columns

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

#it is already merged :D !
head(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