# 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" ...