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

student_data_long <- student_data %>% gather(key = "exam", value = "score", -student_id, -name)

head(student_data_long)
##   student_id     name     exam score
## 1          1 Student1 midterm1    91
## 2          2 Student2 midterm1    76
## 3          3 Student3 midterm1    86
## 4          4 Student4 midterm1    61
## 5          5 Student5 midterm1    99
## 6          6 Student6 midterm1    72
# 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")
)

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
# Split variables name_age to 2 separate columns: name and age
student_data_fixed <- student_data %>% 
  separate(name_age, c("name", "age"), sep = "_")  

# Split variables exam_scores to separate columns for each exam type
student_data_fixed <- student_data_fixed %>% 
  separate(exam_scores, c("midterm1", "midterm2", "final"), sep = ",")

student_data_fixed
##    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
#JAKUB
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")
)
# Split variables name_age to 2 separate columns: name and age
student_data_completed <- student_data %>% 
  separate(name_age, c("name", "age"), sep = "_")  

# Split variables exam_scores to separate columns for each exam type
student_data_completed <- student_data_completed %>% 
  separate(exam_scores, c("midterm1", "midterm2", "final"), sep = ",")

# Use complete() to fill in any missing combinations
student_data_completed <- student_data_completed %>%
  complete(name, age, fill = list(midterm1 = NA, midterm2 = NA, final = NA))

# View the resulting data
print(student_data_completed)
## # 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
#SZYMON
library(tidyr)
# Data
student_data <- data.frame(
  student_id = 1:5,
  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 into long format
student_data <- separate(student_data, name_age, into = c("name", "age"), sep = "_")
student_data <- separate_rows(student_data, exam_scores, sep = ",")
student_data <- separate(student_data, exam_scores, into = c("exam", "score"), sep = "_")
print(student_data)
## # A tibble: 15 × 5
##    student_id name    age   exam     score
##         <int> <chr>   <chr> <chr>    <chr>
##  1          1 John    21    midterm1 80   
##  2          1 John    21    midterm2 85   
##  3          1 John    21    final    75   
##  4          2 Alice   20    midterm1 75   
##  5          2 Alice   20    midterm2 78   
##  6          2 Alice   20    final    80   
##  7          3 Bob     22    midterm1 82   
##  8          3 Bob     22    midterm2 80   
##  9          3 Bob     22    final    85   
## 10          4 Emily   23    midterm1 88   
## 11          4 Emily   23    midterm2 90   
## 12          4 Emily   23    final    92   
## 13          5 Michael 22    midterm1 85   
## 14          5 Michael 22    midterm2 86   
## 15          5 Michael 22    final    88
# Transform data into wide format using spread()
student_data_wide <- spread(student_data, key = exam, value = score)

# View data
print(student_data_wide)
## # A tibble: 5 × 6
##   student_id name    age   final midterm1 midterm2
##        <int> <chr>   <chr> <chr> <chr>    <chr>   
## 1          1 John    21    75    80       85      
## 2          2 Alice   20    80    75       78      
## 3          3 Bob     22    85    82       80      
## 4          4 Emily   23    92    88       90      
## 5          5 Michael 22    88    85       86
#ANIA
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")
)

#separating the column

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

# Merge variables name and age to one column called name_age

student_merge <- student_data %>%  unite("name_age", name:age, sep = ", ")
head(student_merge)
##   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
str(student_data_fixed)
## 'data.frame':    50 obs. of  6 variables:
##  $ student_id: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ name      : chr  "John" "Alice" "Bob" "Emily" ...
##  $ age       : chr  "21" "20" "22" "23" ...
##  $ midterm1  : chr  "midterm1_80" "midterm1_75" "midterm1_82" "midterm1_88" ...
##  $ midterm2  : chr  "midterm2_85" "midterm2_78" "midterm2_80" "midterm2_90" ...
##  $ final     : chr  "final_75" "final_80" "final_85" "final_92" ...