Data wrangling

Task 1 - GATHER

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

gather (student_data,
        key ="Exam_type",
        value="result",
        na.rm = FALSE,
        convert = FALSE,
        factor_key = FALSE,
        -name, -student_id
        )
##     student_id      name Exam_type result
## 1            1  Student1  midterm1     80
## 2            2  Student2  midterm1     74
## 3            3  Student3  midterm1     65
## 4            4  Student4  midterm1     65
## 5            5  Student5  midterm1     91
## 6            6  Student6  midterm1     67
## 7            7  Student7  midterm1     76
## 8            8  Student8  midterm1     88
## 9            9  Student9  midterm1     76
## 10          10 Student10  midterm1     71
## 11          11 Student11  midterm1    100
## 12          12 Student12  midterm1     70
## 13          13 Student13  midterm1     60
## 14          14 Student14  midterm1     62
## 15          15 Student15  midterm1     75
## 16          16 Student16  midterm1     91
## 17          17 Student17  midterm1     67
## 18          18 Student18  midterm1     98
## 19          19 Student19  midterm1     92
## 20          20 Student20  midterm1    100
## 21          21 Student21  midterm1     95
## 22          22 Student22  midterm1     97
## 23          23 Student23  midterm1    100
## 24          24 Student24  midterm1     99
## 25          25 Student25  midterm1     75
## 26          26 Student26  midterm1     75
## 27          27 Student27  midterm1     65
## 28          28 Student28  midterm1     78
## 29          29 Student29  midterm1     68
## 30          30 Student30  midterm1     67
## 31          31 Student31  midterm1     65
## 32          32 Student32  midterm1     89
## 33          33 Student33  midterm1     61
## 34          34 Student34  midterm1     77
## 35          35 Student35  midterm1     62
## 36          36 Student36  midterm1     62
## 37          37 Student37  midterm1     60
## 38          38 Student38  midterm1     82
## 39          39 Student39  midterm1    100
## 40          40 Student40  midterm1     74
## 41          41 Student41  midterm1     92
## 42          42 Student42  midterm1     77
## 43          43 Student43  midterm1     67
## 44          44 Student44  midterm1     95
## 45          45 Student45  midterm1     89
## 46          46 Student46  midterm1     96
## 47          47 Student47  midterm1     93
## 48          48 Student48  midterm1     80
## 49          49 Student49  midterm1     72
## 50          50 Student50  midterm1     66
## 51           1  Student1  midterm2     97
## 52           2  Student2  midterm2     79
## 53           3  Student3  midterm2     87
## 54           4  Student4  midterm2     63
## 55           5  Student5  midterm2     68
## 56           6  Student6  midterm2     65
## 57           7  Student7  midterm2     91
## 58           8  Student8  midterm2     74
## 59           9  Student9  midterm2     72
## 60          10 Student10  midterm2     94
## 61          11 Student11  midterm2     67
## 62          12 Student12  midterm2     91
## 63          13 Student13  midterm2     72
## 64          14 Student14  midterm2     76
## 65          15 Student15  midterm2     64
## 66          16 Student16  midterm2     97
## 67          17 Student17  midterm2     68
## 68          18 Student18  midterm2     74
## 69          19 Student19  midterm2     95
## 70          20 Student20  midterm2     76
## 71          21 Student21  midterm2     75
## 72          22 Student22  midterm2     80
## 73          23 Student23  midterm2     70
## 74          24 Student24  midterm2     68
## 75          25 Student25  midterm2     74
## 76          26 Student26  midterm2     73
## 77          27 Student27  midterm2     96
## 78          28 Student28  midterm2     71
## 79          29 Student29  midterm2     84
## 80          30 Student30  midterm2     84
## 81          31 Student31  midterm2     82
## 82          32 Student32  midterm2     87
## 83          33 Student33  midterm2     79
## 84          34 Student34  midterm2     60
## 85          35 Student35  midterm2     63
## 86          36 Student36  midterm2     81
## 87          37 Student37  midterm2     83
## 88          38 Student38  midterm2     88
## 89          39 Student39  midterm2     97
## 90          40 Student40  midterm2     82
## 91          41 Student41  midterm2     87
## 92          42 Student42  midterm2     66
## 93          43 Student43  midterm2     78
## 94          44 Student44  midterm2     96
## 95          45 Student45  midterm2     79
## 96          46 Student46  midterm2     80
## 97          47 Student47  midterm2     72
## 98          48 Student48  midterm2     68
## 99          49 Student49  midterm2     64
## 100         50 Student50  midterm2     85
## 101          1  Student1     final     94
## 102          2  Student2     final     86
## 103          3  Student3     final     91
## 104          4  Student4     final     92
## 105          5  Student5     final     98
## 106          6  Student6     final     73
## 107          7  Student7     final     84
## 108          8  Student8     final     70
## 109          9  Student9     final     64
## 110         10 Student10     final     94
## 111         11 Student11     final     62
## 112         12 Student12     final     97
## 113         13 Student13     final     60
## 114         14 Student14     final     61
## 115         15 Student15     final     91
## 116         16 Student16     final    100
## 117         17 Student17     final     76
## 118         18 Student18     final     82
## 119         19 Student19     final     64
## 120         20 Student20     final     67
## 121         21 Student21     final     63
## 122         22 Student22     final     89
## 123         23 Student23     final     93
## 124         24 Student24     final     67
## 125         25 Student25     final     72
## 126         26 Student26     final     76
## 127         27 Student27     final     96
## 128         28 Student28     final     95
## 129         29 Student29     final     98
## 130         30 Student30     final     88
## 131         31 Student31     final     83
## 132         32 Student32     final     67
## 133         33 Student33     final     85
## 134         34 Student34     final     92
## 135         35 Student35     final     86
## 136         36 Student36     final     88
## 137         37 Student37     final     79
## 138         38 Student38     final     77
## 139         39 Student39     final     79
## 140         40 Student40     final     71
## 141         41 Student41     final     89
## 142         42 Student42     final     81
## 143         43 Student43     final     75
## 144         44 Student44     final     73
## 145         45 Student45     final     71
## 146         46 Student46     final     62
## 147         47 Student47     final     96
## 148         48 Student48     final     77
## 149         49 Student49     final     91
## 150         50 Student50     final     94

Task 2 - SEPARATE

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

student_data <- student_data %>%
  separate(name_age, into = c("name", "age"), sep = "_")

student_data <- student_data %>%
  separate(exam_scores, into = c("midterm1", "midterm2", "final"), sep = ",")

print(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
## 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

Task 3 - COMPLETE

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

student_data <- separate(student_data, exam_scores, into = c("midterm1", "midterm2", "final"), sep = ",")

student_data <- complete(student_data, fill = list(name_age = "NA", exam_scores = "NA"), explicit = TRUE)

print(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
## 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

Task 4 - SPREAD

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

student_data_long <- student_data %>%
  separate_rows(exam_scores, sep = ",") %>%
  separate(exam_scores, into = c("exam", "score"), sep = "_")

student_data_wide <- pivot_wider(student_data_long, names_from = exam, values_from = score)

print(student_data_wide)
## # 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

Task 5 - UNITE

library(tidyr)

#Data
student_data <- data.frame(
  student_id = 1:50,
  name = c("John", "Alice", "Bob", "Emily", "Michael"),
  age =c("21","20","22","23","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")
)

student_data <- student_data %>%
  unite(name_age, name, age, sep = "_")

print(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