Skip to content

Instantly share code, notes, and snippets.

@chrishaid
Created January 15, 2021 23:37
Show Gist options
  • Save chrishaid/772071034f1b1e2e166969557bfdaaf2 to your computer and use it in GitHub Desktop.
Save chrishaid/772071034f1b1e2e166969557bfdaaf2 to your computer and use it in GitHub Desktop.
Calculating learning environments
# 30 day averages for Semester exams ----
remote_vs_inperson_semester_exams <- att_students %>%
ungroup() %>%
select(student_number,school_number, grade_level_id, enrollment_status, att_date, att_code) %>%
# one-hot encode attendance tupe
mutate(in_person = as.integer(att_code=="present-in-person"),
remote = as.integer(att_code=="present-remote"),
absent = as.integer(att_code=="absent")) %>%
group_by(student_number, school_number, grade_level_id, enrollment_status) %>%
# filter for last 30 enrollment days
slice_max(att_date, n = 30) %>%
# drop absences in last 30 attendance days
filter(absent!=1) %>%
# calcuate date range, pct of days in person, pct of day remote
summarize(days_present = n(),
min_date = min(att_date),
max_date = max(att_date),
in_person_30 = mean(in_person),
remote_30 = mean(remote),
) %>%
Create category variable
mutate(att_category = case_when(
in_person_30 >= .75 ~ "In-Person",
in_person_30 <= .25 ~ "Remote",
TRUE ~ "Mixed")
)
# save to csv
write_csv(remote_vs_inperson_semester_exams, glue::glue("reports/remote_vs_inperson_semester_exams_{today()}.csv"))
# 30 Day averages for any date ----
att_types_assess_dates <- att_students %>%
select(student_number, att_date, att_code) %>%
mutate(in_person = as.integer(att_code=="present-in-person"),
remote = as.integer(att_code=="present-remote"),
absent = as.integer(att_code=="absent")) %>%
group_by(student_number) %>%
mutate(in_person_30 = slide_index_dbl(in_person, att_date, ~mean(.x), .before = 30, .complete = TRUE),
remote_30 = slide_index_dbl(remote, att_date, ~mean(.x), .before = 30, .complete = TRUE),
absent_30 = slide_index_dbl(absent, att_date, ~mean(.x), .before = 30, .complete = TRUE)) %>%
filter(!is.na(in_person_30)) %>%
select(student_number, att_date, in_person_30:absent_30) %>%
inner_join(assessment_dates, by = c( "att_date" = "assessment_date")) %>%
mutate(att_category = case_when(
in_person_30 >= .75 ~ "In-Person",
in_person_30 <= .25 ~ "Remote",
TRUE ~ "Mixed"),
student_number = as.character(student_number)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment