setwd("/Users/isaiahmireles/Desktop/Misconceptions")
# Midterm :
# F23
F23_M_VA <-
read.csv("F23_Midterm_Version_Set_Scores/Midterm_Version_A_scores.csv")
F23_M_VB <-
read.csv("F23_Midterm_Version_Set_Scores/Midterm_Version_B_scores.csv")
# W24
W24_M_VA <-
read.csv("W24_Midterm_Version_Set_Scores/Midterm_Version_A_scores.csv")
W24_M_VB <-
read.csv("W24_Midterm_Version_Set_Scores/Midterm_Version_B_scores.csv")
# S24
S24_M <-
read.csv("24S-STATS-10-LEC-4_Midterm/S24_Midterm_student_responses copy.csv")
# ------------------------------------------------------------------------------- #
# Final :
# F23
F23_F_VA <-
read.csv("F23_Final_Exam_Version_Set_Scores/Final_Exam_Version_A_scores.csv")
F23_F_VB <-
read.csv("F23_Final_Exam_Version_Set_Scores/Final_Exam_Version_B_scores.csv")
# W24
W24_F_VA <-
read.csv("W24_Final_Exam_Version_Set_Scores/Final_Exam_Version_A_scores.csv")
W24_F_VB <-
read.csv("W24_Final_Exam_Version_Set_Scores/Final_Exam_Version_B_scores.csv")
# S24
S24_F_VA <-
read.csv("S24_Final_Exam_Version_Set_Scores/Final_Exam_Version_A_scores.csv")
S24_F_VB <-
read.csv("S24_Final_Exam_Version_Set_Scores/Final_Exam_Version_B_scores.csv")n_std <-
F23_F_VA |> nrow() + F23_F_VB |> nrow() + W24_F_VA |> nrow() + W24_F_VB |> nrow() + S24_F_VA |> nrow() + S24_F_VB |> nrow()
n_std## [1] 1520
Count how many times a user occurs multiple times
library(tidyverse)
bind_rows(
F23_M_VA |> mutate(dataset = "A"),
F23_M_VB |> mutate(dataset = "B")
) |>
group_by(First.Name, Last.Name) |>
summarise(
times = n(),
datasets = paste(unique(dataset), collapse = ", "),
.groups = "drop"
) |>
filter(times > 1)
bind_rows(
F23_M_VA |> mutate(dataset = "A"),
F23_M_VB |> mutate(dataset = "B")
) |>
group_by(First.Name, Last.Name) |>
summarise(
times = n(),
datasets = paste(unique(dataset), collapse = ", "),
.groups = "drop"
) |>
filter(times > 1) |>
count(datasets)Perhaps its only because non-graded are repeated in both?
bind_rows(
F23_M_VA |> filter(Status == "Graded") |> mutate(dataset = "A"),
F23_M_VB |> filter(Status == "Graded") |> mutate(dataset = "B")
) |>
group_by(First.Name, Last.Name) |>
summarise(
times = n(),
datasets = paste(unique(dataset), collapse = ", "),
.groups = "drop"
) |>
filter(times > 1)check_sid <- function(df) {
# Check whether SID column exists
if (is.null(df$SID)) {
return("SID column is NULL or does not exist")
}
df |>
mutate(idx = row_number()) |>
filter(
is.na(SID) |
trimws(as.character(SID)) == "" |
!grepl("^[0-9]+$", as.character(SID))
) |>
select(idx, SID)
}find_duplicates <- function(df) {
df |>
mutate(idx = row_number()) |>
group_by(SID) |> # grp by student id
filter(n() > 1) |>
ungroup() |>
pull(idx) # make vector
}bind_rows(
F23_F_VA |> filter(Status == "Graded") |> mutate(dataset = "A"),
F23_F_VB |> filter(Status == "Graded") |> mutate(dataset = "B")
) |>
group_by(First.Name, Last.Name) |>
summarise(
times = n(),
datasets = paste(unique(dataset), collapse = ", "),
.groups = "drop"
) |>
filter(times > 1)F23_F <- F23_F |>
left_join(
F23_M_dictionary |>
filter(!is.na(SID)) |>
distinct(SID, student_id),
by = "SID"
)# reconfigure questions
F23_M <- F23_M |>
rename_with(
~ paste0(
"Q",
sub("^X([0-9]+).*", "\\1", .x),
"_F23M"
),
matches("^X[0-9]+\\.\\.Question")
)F23_F <-
F23_F |>
rename_with(
~ paste0(
"Q",
sub("^X([0-9]+).*", "\\1", .x),
"_F23F"
),
matches("^X[0-9]+\\.\\.Question")
)So the final has 31Qs and Midterm has 34, so im checking what those values become :
W24_M_VA <- W24_M_VA |>
filter(Status == "Graded") |>
mutate(version = "A", exam = "Midterm", term = "W24")
W24_M_VB <- W24_M_VB |>
filter(Status == "Graded") |>
mutate(version = "B", exam = "Midterm", term = "W24")## [1] 297
## [1] 297
## integer(0)
## function (df)
## {
## pull(ungroup(filter(group_by(mutate(df, idx = row_number()),
## SID), n() > 1)), idx)
## }
## <bytecode: 0x12cd74f50>
W24_M <-
W24_M |>
select(student_id, everything(),
-c(
SID,
Submission.ID,
First.Name,
Last.Name,
Email,
Lateness..H.M.S.,
Submission.Time,
View.Count,
Submission.Count
)) W24_M <-
W24_M |>
rename_with(
~ paste0(
"Q",
sub("^X([0-9]+).*", "\\1", .x)
),
matches("^X[0-9]+\\.\\.Question")
)W24_F_VA <-
W24_F_VA |>
filter(Status == "Graded") |>
mutate(version = "A", exam = "Final", term = "W24")
W24_F_VB <-
W24_F_VB |>
filter(Status == "Graded") |>
mutate(version = "B", exam = "Final", term = "W24")## integer(0)
W24_F <-
W24_F |>
select(
student_id,
everything(),
-c(
Status,
SID,
Submission.ID,
First.Name,
Last.Name,
Email,
Lateness..H.M.S.,
Submission.Time,
View.Count,
Submission.Count
)
) |>
rename_with(
~ paste0(
"Q",
sub("^X([0-9]+).*", "\\1", .x)
),
matches("^X[0-9]+\\.\\.Question")
)bind_rows(F23, W24) |>
filter(is.na(unidentified)) |>
mutate(
student_id_type = grepl("^student_[0-9]+$", student_id)
) |>
count(student_id_type)unfortunately this one doesnt fit the same pattern of col-names so coding is difficult
However note the ability to view typical student responses
rm(list=ls())
## [1] "First.Name" "Last.Name"
## [3] "SID" "Email"
## [5] "Sections" "Total.Score"
## [7] "Max.Points" "Status"
## [9] "Submission.ID" "Submission.Time"
## [11] "Lateness..H.M.S." "View.Count"
## [13] "Submission.Count" "X1..Question.1..1.0.pts."
## [15] "X2..Question.2..1.0.pts." "X3..Question.3..1.0.pts."
## [17] "X4..Question.4..1.0.pts." "X5..Question.5..1.0.pts."
## [19] "X6..Question.6..1.0.pts." "X7..Question.7..1.0.pts."
## [21] "X8..Question.8..1.0.pts." "X9..Question.9..1.0.pts."
## [23] "X10..Question.10..1.0.pts." "X11..Question.11..1.0.pts."
## [25] "X12..Question.12..1.0.pts." "X13..Question.13..1.0.pts."
## [27] "X14..Question.14..1.0.pts." "X15..Question.15..1.0.pts."
## [29] "X16..Question.16..1.0.pts." "X17..Question.17..1.0.pts."
## [31] "X18..Question.18..1.0.pts." "X19..Question.19..1.0.pts."
## [33] "X20..Question.20..1.0.pts." "X21..Question.21..1.0.pts."
## [35] "X22..Question.22..1.0.pts." "X23..Question.23..1.0.pts."
## [37] "X24..Question.24..1.0.pts." "X25..Question.25..1.0.pts."
## [39] "X26..Question.26..1.0.pts." "X27..Question.27..1.0.pts."
## [41] "X28..Question.28..1.0.pts." "X29..Question.29..1.0.pts."
## [43] "X30..Question.30..1.0.pts." "X31..Question.31..1.0.pts."
## [45] "X32..Question.32..1.0.pts."