DS Lab_1

Szymon Skarbek, Cyryl Ufnał, Mykyta Zinchenko

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