set.seed(123)
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)
)

task1

set.seed(123)
library(tidyr)
student_data_long <- gather(student_data, exam_type, exam_score, 3:5)
head(student_data_long)
##   student_id     name exam_type exam_score
## 1          1 Student1  midterm1         90
## 2          2 Student2  midterm1         74
## 3          3 Student3  midterm1         73
## 4          4 Student4  midterm1         62
## 5          5 Student5  midterm1         96
## 6          6 Student6  midterm1         73

task2

set.seed(123)
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")
)
separated_data_name_age <- separate(student_data2, "name_age", sep="_", c("name", "age"))
separated_data <- separate(separated_data_name_age, "exam_scores", into = c("midterm1", "midterm2", "final"), sep = ",")
long_format_data <- separated_data %>%
  pivot_longer(cols = c(midterm1, midterm2, final), 
               names_to = "exam", 
               values_to = "score")

long_format_data
## # A tibble: 150 × 5
##    student_id name  age   exam     score      
##         <int> <chr> <chr> <chr>    <chr>      
##  1          1 John  21    midterm1 midterm1_80
##  2          1 John  21    midterm2 midterm2_85
##  3          1 John  21    final    final_75   
##  4          2 Alice 20    midterm1 midterm1_75
##  5          2 Alice 20    midterm2 midterm2_78
##  6          2 Alice 20    final    final_80   
##  7          3 Bob   22    midterm1 midterm1_82
##  8          3 Bob   22    midterm2 midterm2_80
##  9          3 Bob   22    final    final_85   
## 10          4 Emily 23    midterm1 midterm1_88
## # ℹ 140 more rows

task3

set.seed(123)
library(tidyr)
complete_data <- complete(separated_data, name, age, fill = list(midterm1 = NA, midterm2 = NA, final = NA))
complete_data
## # A tibble: 65 × 6
##    name  age   student_id midterm1    midterm2    final   
##    <chr> <chr>      <int> <chr>       <chr>       <chr>   
##  1 Alice 20             2 midterm1_75 midterm2_78 final_80
##  2 Alice 20             7 midterm1_75 midterm2_78 final_80
##  3 Alice 20            12 midterm1_75 midterm2_78 final_80
##  4 Alice 20            17 midterm1_75 midterm2_78 final_80
##  5 Alice 20            22 midterm1_75 midterm2_78 final_80
##  6 Alice 20            27 midterm1_75 midterm2_78 final_80
##  7 Alice 20            32 midterm1_75 midterm2_78 final_80
##  8 Alice 20            37 midterm1_75 midterm2_78 final_80
##  9 Alice 20            42 midterm1_75 midterm2_78 final_80
## 10 Alice 20            47 midterm1_75 midterm2_78 final_80
## # ℹ 55 more rows

task4

set.seed(123)
library(tidyr)
spread_data <- spread(student_data_long, key = "exam_type", value = "exam_score")
spread_data
##    student_id      name final midterm1 midterm2
## 1           1  Student1    74       90       74
## 2           2  Student2    83       74      100
## 3           3  Student3    82       73       85
## 4           4  Student4    66       62       90
## 5           5  Student5    88       96       75
## 6           6  Student6    74       73       89
## 7           7  Student7    82       84       65
## 8           8  Student8    85       85       67
## 9           9  Student9    97       86       81
## 10         10 Student10    91       64       81
## 11         11 Student11    66       86       98
## 12         12 Student12    86       87       90
## 13         13 Student13    64       68       76
## 14         14 Student14    65       88       93
## 15         15 Student15    75       94       63
## 16         16 Student16    83       67       72
## 17         17 Student17    91       85       64
## 18         18 Student18    80       66       84
## 19         19 Student19    70       68       81
## 20         20 Student20    95       78       84
## 21         21 Student21    78       95       91
## 22         22 Student22    84       73       84
## 23         23 Student23    98       76       82
## 24         24 Student24    85       98       94
## 25         25 Student25    68       71       99
## 26         26 Student26    66       74       89
## 27         27 Student27    93       91       71
## 28         28 Student28    72       66       90
## 29         29 Student29    78       68       89
## 30         30 Student30    98      100       94
## 31         31 Student31    63       69       73
## 32         32 Student32    60       82       88
## 33         33 Student33    99       86       91
## 34         34 Student34    89       66       66
## 35         35 Student35    89       86       62
## 36         36 Student36    84       91       82
## 37         37 Student37    75       97       74
## 38         38 Student38    83       84       80
## 39         39 Student39    70       93       96
## 40         40 Student40    79       88       67
## 41         41 Student41    99       64       69
## 42         42 Student42    62       67       93
## 43         43 Student43    88       71       69
## 44         44 Student44    95       72       81
## 45         45 Student45    81       77       71
## 46         46 Student46    79       92       79
## 47         47 Student47    70       86       76
## 48         48 Student48    67       84       94
## 49         49 Student49    80       97       99
## 50         50 Student50    61       80       89

task5

set.seed(123)
library(tidyr)
united_data <- unite(separated_data, col = "name_age", name, age, sep = "_")
united_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
## 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