# # Notes
#
# * Source the file before running the functions.
# * Don't forget to uncomment the 'library' functions below.
# library(checkmate)
# library(dplyr)
# library(rutils) # https://github.com/danielvartan/rutils
# library(hms)
# library(lubridate)
# library(mctq)
# library(rlang)
# library(stringr)
# library(usethis)
# library(utils)
# library(validate)
#' Build a fictional MCTQ\eqn{^{Shift}}{ Shift} raw dataset
#'
#' @description
#'
#' `build_shift_mctq()` builds a fictional raw dataset, __for testing and
#' learning purposes__, composed of basic/measurable variables of the Munich
#' ChronoType Questionnaire (MCTQ) shift version. See
#' [`?shift_mctq`][mctq::shift_mctq] to learn more.
#'
#' @param write (optional) a [`logical`][base::logical()] value indicating if
#' the function must write a `shift_mctq.csv` file to `"./inst/extdata/"`
#' (default: `FALSE`).
#' @param random_cases (optional) a [`logical`][base::logical()] value
#' indicating if the function must add random MCTQ cases besides the core
#' ones.
#'
#' @return An invisible [`tibble`][dplyr::tibble()] with a raw
#' MCTQ\eqn{^{Shift}}{ Shift} dataset.
#'
#' @family data functions
#' @importFrom magrittr %>%
#' @importFrom rlang .data !! :=
#' @noRd
#'
#' @examples
#' \dontrun{
#' if (requireNamespace("utils", quietly = TRUE)) {
#' utils::View(build_shift_mctq())
#' }
#' }
build_shift_mctq <- function(write = FALSE, random_cases = TRUE) {
checkmate::assert_flag(write)
checkmate::assert_flag(random_cases)
# Set IDs -----
set.seed(1)
reserved_id <- sample(50, 11)
id <- seq(50)[!(seq(50) %in% reserved_id)]
# Create cases -----
## Base respondent: sleeps less than the recommended on workdays and
## stretches during work-free days
shift_mctq <- dplyr::tibble(
`ID` = as.character(reserved_id[1]), # integer | [auto-increment]
`W M N DAYS` = "6", # integer | [0-7]
`W M BEDTIME` = "23:20", # hms | HMS, HM, H [0-24h]
`W M SLEEP PREP` = "00:05", # hms | HMS, HM, H [0-24h]
`W M SLEEP LAT` = "5", # Duration | M
`W M SLEEP END` = "03:40", # hms | HMS, HM, H [0-24h]
`W M TIME GU` = "10", # Duration | M
`W M ALARM` = "Yes", # logical | Yes/No
`W M REASONS` = "No", # logical | Yes/No
`W M REASONS WHY` = "", # character
`W M NAP` = "Yes", # logical | Yes/No
`W M NAP ONSET` = "14:00", # hms | HMS, HM, H [0-24h]
`W M NAP END` = "14:40", # hms | HMS, HM, H [0-24h]
`F M N DAYS` = "2", # integer | [0-7]
`F M BEDTIME` = "23:05", # hms | HMS, HM, H [0-24h]
`F M SLEEP PREP` = "00:20", # hms | HMS, HM, H [0-24h]
`F M SLEEP LAT` = "10", # Duration | M
`F M SLEEP END` = "10:00", # hms | HMS, HM, H [0-24h]
`F M TIME GU` = "25", # Duration | M
`F M ALARM` = "No", # logical | Yes/No
`F M REASONS` = "Yes", # logical | Yes/No
`F M REASONS WHY` = "Child(ren)/pet(s)", # character
`F M NAP` = "No", # logical | Yes/No
`F M NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`F M NAP END` = "", # hms | HMS, HM, H [0-24h]
`W E N DAYS` = "4", # integer | [0-7]
`W E BEDTIME` = "01:45", # hms | HMS, HM, H [0-24h]
`W E SLEEP PREP` = "02:50", # hms | HMS, HM, H [0-24h]
`W E SLEEP LAT` = "30", # Duration | M
`W E SLEEP END` = "08:15", # hms | HMS, HM, H [0-24h]
`W E TIME GU` = "10", # Duration | M
`W E ALARM` = "Yes", # logical | Yes/No
`W E REASONS` = "Yes", # logical | Yes/No
`W E REASONS WHY` = "Child(ren)/pet(s)", # character
`W E NAP` = "No", # logical | Yes/No
`W E NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`W E NAP END` = "", # hms | HMS, HM, H [0-24h]
`F E N DAYS` = "2", # integer | [0-7]
`F E BEDTIME` = "00:55", # hms | HMS, HM, H [0-24h]
`F E SLEEP PREP` = "02:00", # hms | HMS, HM, H [0-24h]
`F E SLEEP LAT` = "35", # Duration | M
`F E SLEEP END` = "11:20", # hms | HMS, HM, H [0-24h]
`F E TIME GU` = "15", # Duration | M
`F E ALARM` = "No", # logical | Yes/No
`F E REASONS` = "Yes", # logical | Yes/No
`F E REASONS WHY` = "Hobbies", # character
`F E NAP` = "Yes", # logical | Yes/No
`F E NAP ONSET` = "18:40", # hms | HMS, HM, H [0-24h]
`F E NAP END` = "19:20", # hms | HMS, HM, H [0-24h]
`W N N DAYS` = "6", # integer | [0-7]
`W N BEDTIME` = "07:30", # hms | HMS, HM, H [0-24h]
`W N SLEEP PREP` = "07:55", # hms | HMS, HM, H [0-24h]
`W N SLEEP LAT` = "55", # Duration | M
`W N SLEEP END` = "12:35", # hms | HMS, HM, H [0-24h]
`W N TIME GU` = "25", # Duration | M
`W N ALARM` = "Yes", # logical | Yes/No
`W N REASONS` = "No", # logical | Yes/No
`W N REASONS WHY` = "", # character
`W N NAP` = "No", # logical | Yes/No
`W N NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`W N NAP END` = "", # hms | HMS, HM, H [0-24h]
`F N N DAYS` = "8", # integer | [0-7]
`F N BEDTIME` = "21:30", # hms | HMS, HM, H [0-24h]
`F N SLEEP PREP` = "22:55", # hms | HMS, HM, H [0-24h]
`F N SLEEP LAT` = "75", # Duration | M
`F N SLEEP END` = "06:20", # hms | HMS, HM, H [0-24h]
`F N TIME GU` = "30", # Duration | M
`F N ALARM` = "No", # logical | Yes/No
`F N REASONS` = "No", # logical | Yes/No
`F N REASONS WHY` = "", # character
`F N NAP` = "Yes", # logical | Yes/No
`F N NAP ONSET` = "12:45", # hms | HMS, HM, H [0-24h]
`F N NAP END` = "13:10" # hms | HMS, HM, H [0-24h]
)
## Random cases
format_logical <- function(x) {
dplyr::case_when(
x == TRUE ~ "Yes",
x == FALSE ~ "No"
)
}
format_hms <- function(x) {
format <- c(1, 5)
x <- hms::hms(mctq:::extract_seconds(x))
substr(as.character(x), format[1], format[2])
}
format_duration <- function(x) {
as.character(as.numeric(x) / 60)
}
if (isTRUE(random_cases)) {
for (i in id) {
random_case <-
random_mctq(model = "shift") |>
dplyr::as_tibble()
values <- list(
w_m = c("W M", "_w_m"),
f_m = c("F M", "_f_m"),
w_e = c("W E", "_w_e"),
f_r = c("F E", "_f_e"),
w_n = c("W N", "_w_n"),
f_n = c("F N", "_f_n")
)
random_case <-
random_case |>
dplyr::mutate(`ID` = as.character(i)) %>% # Don't change the pipe.
dplyr::relocate(.data$`ID`, .before = .data$n_w_m)
# nolint start: object_name_linter.
for (i in values) {
random_case <-
random_case %>% # Don't change the pipe.
dplyr::mutate(
!!as.symbol(paste(i[1], "N DAYS")) :=
as.character(.data[[paste0("n", i[2])]]),
!!as.symbol(paste(i[1], "BEDTIME")) :=
format_hms(.data[[paste0("bt", i[2])]]),
!!as.symbol(paste(i[1], "SLEEP PREP")) :=
format_hms(.data[[paste0("sprep", i[2])]]),
!!as.symbol(paste(i[1], "SLEEP LAT")) :=
format_duration(.data[[paste0("slat", i[2])]]),
!!as.symbol(paste(i[1], "SLEEP END")) :=
format_hms(.data[[paste0("se", i[2])]]),
!!as.symbol(paste(i[1], "TIME GU")) :=
format_duration(.data[[paste0("tgu", i[2])]]),
!!as.symbol(paste(i[1], "ALARM")) :=
format_logical(.data[[paste0("alarm", i[2])]]),
!!as.symbol(paste(i[1], "REASONS")) :=
format_logical(.data[[paste0("reasons", i[2])]]),
!!as.symbol(paste(i[1], "REASONS WHY")) :=
as.character(.data[[paste0("reasons_why", i[2])]]),
!!as.symbol(paste(i[1], "NAP")) :=
format_logical(.data[[paste0("nap", i[2])]]),
!!as.symbol(paste(i[1], "NAP ONSET")) :=
format_hms(.data[[paste0("napo", i[2])]]),
!!as.symbol(paste(i[1], "NAP END")) :=
format_hms(.data[[paste0("nape", i[2])]])
) |>
dplyr::select(-dplyr::ends_with(i[2]))
}
# nolint end
shift_mctq <- dplyr::bind_rows(shift_mctq, random_case)
}
}
## Inverted values for bedtime and sleep preparation
shift_mctq <-
shift_mctq |>
dplyr::add_row(
`ID` = as.character(reserved_id[2]), # integer | [auto-increment]
`W M N DAYS` = "6", # integer | [0-7]
`W M BEDTIME` = "20:20", # hms | HMS, HM, H [0-24h] # INVERSION
`W M SLEEP PREP` = "19:40", # hms | HMS, HM, H [0-24h] # INVERSION
`W M SLEEP LAT` = "5", # Duration | M
`W M SLEEP END` = "04:45", # hms | HMS, HM, H [0-24h]
`W M TIME GU` = "5", # Duration | M
`W M ALARM` = "Yes", # logical | Yes/No
`W M REASONS` = "Yes", # logical | Yes/No
`W M REASONS WHY` = "Hobbies", # character
`W M NAP` = "Yes", # logical | Yes/No
`W M NAP ONSET` = "13:30", # hms | HMS, HM, H [0-24h]
`W M NAP END` = "14:10", # hms | HMS, HM, H [0-24h]
`F M N DAYS` = "2", # integer | [0-7]
`F M BEDTIME` = "23:25", # hms | HMS, HM, H [0-24h]
`F M SLEEP PREP` = "23:50", # hms | HMS, HM, H [0-24h]
`F M SLEEP LAT` = "20", # Duration | M
`F M SLEEP END` = "09:05", # hms | HMS, HM, H [0-24h]
`F M TIME GU` = "70", # Duration | M
`F M ALARM` = "No", # logical | Yes/No
`F M REASONS` = "No", # logical | Yes/No
`F M REASONS WHY` = "", # character
`F M NAP` = "No", # logical | Yes/No
`F M NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`F M NAP END` = "", # hms | HMS, HM, H [0-24h]
`W E N DAYS` = "4", # integer | [0-7]
`W E BEDTIME` = "00:25", # hms | HMS, HM, H [0-24h]
`W E SLEEP PREP` = "01:05", # hms | HMS, HM, H [0-24h]
`W E SLEEP LAT` = "15", # Duration | M
`W E SLEEP END` = "08:15", # hms | HMS, HM, H [0-24h]
`W E TIME GU` = "25", # Duration | M
`W E ALARM` = "No", # logical | Yes/No
`W E REASONS` = "No", # logical | Yes/No
`W E REASONS WHY` = "", # character
`W E NAP` = "Yes", # logical | Yes/No
`W E NAP ONSET` = "19:25", # hms | HMS, HM, H [0-24h]
`W E NAP END` = "19:55", # hms | HMS, HM, H [0-24h]
`F E N DAYS` = "2", # integer | [0-7]
`F E BEDTIME` = "02:25", # hms | HMS, HM, H [0-24h] # INVERSION
`F E SLEEP PREP` = "01:55", # hms | HMS, HM, H [0-24h] # INVERSION
`F E SLEEP LAT` = "25", # Duration | M
`F E SLEEP END` = "08:55", # hms | HMS, HM, H [0-24h]
`F E TIME GU` = "25", # Duration | M
`F E ALARM` = "No", # logical | Yes/No
`F E REASONS` = "No", # logical | Yes/No
`F E REASONS WHY` = "", # character
`F E NAP` = "Yes", # logical | Yes/No
`F E NAP ONSET` = "15:35", # hms | HMS, HM, H [0-24h]
`F E NAP END` = "16:10", # hms | HMS, HM, H [0-24h]
`W N N DAYS` = "6", # integer | [0-7]
`W N BEDTIME` = "08:00", # hms | HMS, HM, H [0-24h]
`W N SLEEP PREP` = "08:15", # hms | HMS, HM, H [0-24h]
`W N SLEEP LAT` = "35", # Duration | M
`W N SLEEP END` = "15:10", # hms | HMS, HM, H [0-24h]
`W N TIME GU` = "35", # Duration | M
`W N ALARM` = "No", # logical | Yes/No
`W N REASONS` = "No", # logical | Yes/No
`W N REASONS WHY` = "", # character
`W N NAP` = "Yes", # logical | Yes/No
`W N NAP ONSET` = "01:55", # hms | HMS, HM, H [0-24h]
`W N NAP END` = "02:40", # hms | HMS, HM, H [0-24h]
`F N N DAYS` = "8", # integer | [0-7]
`F N BEDTIME` = "18:05", # hms | HMS, HM, H [0-24h]
`F N SLEEP PREP` = "18:45", # hms | HMS, HM, H [0-24h]
`F N SLEEP LAT` = "75", # Duration | M
`F N SLEEP END` = "02:00", # hms | HMS, HM, H [0-24h]
`F N TIME GU` = "45", # Duration | M
`F N ALARM` = "No", # logical | Yes/No
`F N REASONS` = "No", # logical | Yes/No
`F N REASONS WHY` = "", # character
`F N NAP` = "No", # logical | Yes/No
`F N NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`F N NAP END` = "" # hms | HMS, HM, H [0-24h]
) |>
## Presence of invalid values
dplyr::add_row(
`ID` = as.character(reserved_id[3]), # integer | [auto-increment]
`W M N DAYS` = "6", # integer | [0-7]
`W M BEDTIME` = "21:30", # hms | HMS, HM, H [0-24h]
`W M SLEEP PREP` = "22:25", # hms | HMS, HM, H [0-24h]
`W M SLEEP LAT` = "20", # Duration | M
`W M SLEEP END` = "04:45", # hms | HMS, HM, H [0-24h]
`W M TIME GU` = "5", # Duration | M
`W M ALARM` = "Yes", # logical | Yes/No
`W M REASONS` = "Yes", # logical | Yes/No
`W M REASONS WHY` = "Hobbies", # character
`W M NAP` = "Yes", # logical | Yes/No
`W M NAP ONSET` = "11:20", # hms | HMS, HM, H [0-24h]
`W M NAP END` = "11:45", # hms | HMS, HM, H [0-24h]
`F M N DAYS` = "2", # integer | [0-7]
`F M BEDTIME` = "00:45", # hms | HMS, HM, H [0-24h]
`F M SLEEP PREP` = "35:00", # hms | HMS, HM, H [0-24h] # INVALID
`F M SLEEP LAT` = "30", # Duration | M
`F M SLEEP END` = "08:40", # hms | HMS, HM, H [0-24h]
`F M TIME GU` = "10", # Duration | M
`F M ALARM` = "No", # logical | Yes/No
`F M REASONS` = "No", # logical | Yes/No
`F M REASONS WHY` = "", # character
`F M NAP` = "Yes", # logical | Yes/No
`F M NAP ONSET` = "17:35", # hms | HMS, HM, H [0-24h]
`F M NAP END` = "18:05", # hms | HMS, HM, H [0-24h]
`W E N DAYS` = "4", # integer | [0-7]
`W E BEDTIME` = "00:30", # hms | HMS, HM, H [0-24h]
`W E SLEEP PREP` = "00:55", # hms | HMS, HM, H [0-24h]
`W E SLEEP LAT` = "10", # Duration | M
`W E SLEEP END` = "08:20", # hms | HMS, HM, H [0-24h]
`W E TIME GU` = "30", # Duration | M
`W E ALARM` = "Yes", # logical | Yes/No
`W E REASONS` = "No", # logical | Yes/No
`W E REASONS WHY` = "", # character
`W E NAP` = "No", # logical | Yes/No
`W E NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`W E NAP END` = "", # hms | HMS, HM, H [0-24h]
`F E N DAYS` = "2", # integer | [0-7]
`F E BEDTIME` = "01:00", # hms | HMS, HM, H [0-24h]
`F E SLEEP PREP` = "01:05", # hms | HMS, HM, H [0-24h]
`F E SLEEP LAT` = "30", # Duration | M
`F E SLEEP END` = "09:20", # hms | HMS, HM, H [0-24h]
`F E TIME GU` = "10", # Duration | M
`F E ALARM` = "No", # logical | Yes/No
`F E REASONS` = "Yes", # logical | Yes/No
`F E REASONS WHY` = "Hobbies", # character
`F E NAP` = "Yes", # logical | Yes/No
`F E NAP ONSET` = "14:35", # hms | HMS, HM, H [0-24h]
`F E NAP END` = "14:55", # hms | HMS, HM, H [0-24h]
`W N N DAYS` = "6", # integer | [0-7]
`W N BEDTIME` = "06:05", # hms | HMS, HM, H [0-24h]
`W N SLEEP PREP` = "06:50", # hms | HMS, HM, H [0-24h]
`W N SLEEP LAT` = "30", # Duration | M
`W N SLEEP END` = "42:05", # hms | HMS, HM, H [0-24h] # INVALID
`W N TIME GU` = "30", # Duration | M
`W N ALARM` = "Yes", # logical | Yes/No
`W N REASONS` = "No", # logical | Yes/No
`W N REASONS WHY` = "", # character
`W N NAP` = "Yes", # logical | Yes/No
`W N NAP ONSET` = "03:30", # hms | HMS, HM, H [0-24h]
`W N NAP END` = "04:20", # hms | HMS, HM, H [0-24h]
`F N N DAYS` = "8", # integer | [0-7]
`F N BEDTIME` = "21:30", # hms | HMS, HM, H [0-24h]
`F N SLEEP PREP` = "21:55", # hms | HMS, HM, H [0-24h]
`F N SLEEP LAT` = "50", # Duration | M
`F N SLEEP END` = "01:55", # hms | HMS, HM, H [0-24h]
`F N TIME GU` = "40", # Duration | M
`F N ALARM` = "No", # logical | Yes/No
`F N REASONS` = "Yes", # logical | Yes/No
`F N REASONS WHY` = "Hobbies", # character
`F N NAP` = "No", # logical | Yes/No
`F N NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`F N NAP END` = "" # hms | HMS, HM, H [0-24h]
) |>
## Uses an alarm clock on work-free days
dplyr::add_row(
`ID` = as.character(reserved_id[4]), # integer | [auto-increment]
`W M N DAYS` = "6", # integer | [0-7]
`W M BEDTIME` = "23:25", # hms | HMS, HM, H [0-24h]
`W M SLEEP PREP` = "23:35", # hms | HMS, HM, H [0-24h]
`W M SLEEP LAT` = "30", # Duration | M
`W M SLEEP END` = "04:15", # hms | HMS, HM, H [0-24h]
`W M TIME GU` = "5", # Duration | M
`W M ALARM` = "Yes", # logical | Yes/No
`W M REASONS` = "No", # logical | Yes/No
`W M REASONS WHY` = "", # character
`W M NAP` = "Yes", # logical | Yes/No
`W M NAP ONSET` = "15:55", # hms | HMS, HM, H [0-24h]
`W M NAP END` = "16:30", # hms | HMS, HM, H [0-24h]
`F M N DAYS` = "2", # integer | [0-7]
`F M BEDTIME` = "01:25", # hms | HMS, HM, H [0-24h]
`F M SLEEP PREP` = "01:50", # hms | HMS, HM, H [0-24h]
`F M SLEEP LAT` = "30", # Duration | M
`F M SLEEP END` = "08:05", # hms | HMS, HM, H [0-24h]
`F M TIME GU` = "65", # Duration | M
`F M ALARM` = "Yes", # logical | Yes/No # ALARM == "Yes"
`F M REASONS` = "Yes", # logical | Yes/No
`F M REASONS WHY` = "Hobbies", # character
`F M NAP` = "No", # logical | Yes/No
`F M NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`F M NAP END` = "", # hms | HMS, HM, H [0-24h]
`W E N DAYS` = "4", # integer | [0-7]
`W E BEDTIME` = "23:10", # hms | HMS, HM, H [0-24h]
`W E SLEEP PREP` = "23:40", # hms | HMS, HM, H [0-24h]
`W E SLEEP LAT` = "30", # Duration | M
`W E SLEEP END` = "05:45", # hms | HMS, HM, H [0-24h]
`W E TIME GU` = "30", # Duration | M
`W E ALARM` = "No", # logical | Yes/No
`W E REASONS` = "No", # logical | Yes/No
`W E REASONS WHY` = "", # character
`W E NAP` = "No", # logical | Yes/No
`W E NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`W E NAP END` = "", # hms | HMS, HM, H [0-24h]
`F E N DAYS` = "2", # integer | [0-7]
`F E BEDTIME` = "23:10", # hms | HMS, HM, H [0-24h]
`F E SLEEP PREP` = "00:15", # hms | HMS, HM, H [0-24h]
`F E SLEEP LAT` = "35", # Duration | M
`F E SLEEP END` = "08:45", # hms | HMS, HM, H [0-24h]
`F E TIME GU` = "5", # Duration | M
`F E ALARM` = "Yes", # logical | Yes/No # ALARM == "Yes"
`F E REASONS` = "No", # logical | Yes/No
`F E REASONS WHY` = "", # character
`F E NAP` = "Yes", # logical | Yes/No
`F E NAP ONSET` = "17:20", # hms | HMS, HM, H [0-24h]
`F E NAP END` = "18:00", # hms | HMS, HM, H [0-24h]
`W N N DAYS` = "6", # integer | [0-7]
`W N BEDTIME` = "07:10", # hms | HMS, HM, H [0-24h]
`W N SLEEP PREP` = "07:20", # hms | HMS, HM, H [0-24h]
`W N SLEEP LAT` = "15", # Duration | M
`W N SLEEP END` = "12:40", # hms | HMS, HM, H [0-24h]
`W N TIME GU` = "20", # Duration | M
`W N ALARM` = "No", # logical | Yes/No
`W N REASONS` = "No", # logical | Yes/No
`W N REASONS WHY` = "", # character
`W N NAP` = "Yes", # logical | Yes/No
`W N NAP ONSET` = "23:45", # hms | HMS, HM, H [0-24h]
`W N NAP END` = "00:00", # hms | HMS, HM, H [0-24h]
`F N N DAYS` = "8", # integer | [0-7]
`F N BEDTIME` = "22:25", # hms | HMS, HM, H [0-24h]
`F N SLEEP PREP` = "22:50", # hms | HMS, HM, H [0-24h]
`F N SLEEP LAT` = "80", # Duration | M
`F N SLEEP END` = "10:55", # hms | HMS, HM, H [0-24h]
`F N TIME GU` = "35", # Duration | M
`F N ALARM` = "Yes", # logical | Yes/No # ALARM == "Yes"
`F N REASONS` = "No", # logical | Yes/No
`F N REASONS WHY` = "", # character
`F N NAP` = "Yes", # logical | Yes/No
`F N NAP ONSET` = "17:50", # hms | HMS, HM, H [0-24h]
`F N NAP END` = "18:25" # hms | HMS, HM, H [0-24h]
) |>
## Null MCTQ
dplyr::add_row(
`ID` = as.character(reserved_id[5]), # integer | [auto-increment]
`W M N DAYS` = "", # integer | [0-7]
`W M BEDTIME` = "", # hms | HMS, HM, H [0-24h]
`W M SLEEP PREP` = "", # hms | HMS, HM, H [0-24h]
`W M SLEEP LAT` = "", # Duration | M
`W M SLEEP END` = "", # hms | HMS, HM, H [0-24h]
`W M TIME GU` = "", # Duration | M
`W M ALARM` = "", # logical | Yes/No
`W M REASONS` = "", # logical | Yes/No
`W M REASONS WHY` = "", # character
`W M NAP` = "", # logical | Yes/No
`W M NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`W M NAP END` = "", # hms | HMS, HM, H [0-24h]
`F M N DAYS` = "", # integer | [0-7]
`F M BEDTIME` = "", # hms | HMS, HM, H [0-24h]
`F M SLEEP PREP` = "", # hms | HMS, HM, H [0-24h]
`F M SLEEP LAT` = "", # Duration | M
`F M SLEEP END` = "", # hms | HMS, HM, H [0-24h]
`F M TIME GU` = "", # Duration | M
`F M ALARM` = "", # logical | Yes/No
`F M REASONS` = "", # logical | Yes/No
`F M REASONS WHY` = "", # character
`F M NAP` = "", # logical | Yes/No
`F M NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`F M NAP END` = "", # hms | HMS, HM, H [0-24h]
`W E N DAYS` = "", # integer | [0-7]
`W E BEDTIME` = "", # hms | HMS, HM, H [0-24h]
`W E SLEEP PREP` = "", # hms | HMS, HM, H [0-24h]
`W E SLEEP LAT` = "", # Duration | M
`W E SLEEP END` = "", # hms | HMS, HM, H [0-24h]
`W E TIME GU` = "", # Duration | M
`W E ALARM` = "", # logical | Yes/No
`W E REASONS` = "", # logical | Yes/No
`W E REASONS WHY` = "", # character
`W E NAP` = "", # logical | Yes/No
`W E NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`W E NAP END` = "", # hms | HMS, HM, H [0-24h]
`F E N DAYS` = "", # integer | [0-7]
`F E BEDTIME` = "", # hms | HMS, HM, H [0-24h]
`F E SLEEP PREP` = "", # hms | HMS, HM, H [0-24h]
`F E SLEEP LAT` = "", # Duration | M
`F E SLEEP END` = "", # hms | HMS, HM, H [0-24h]
`F E TIME GU` = "", # Duration | M
`F E ALARM` = "", # logical | Yes/No
`F E REASONS` = "", # logical | Yes/No
`F E REASONS WHY` = "", # character
`F E NAP` = "", # logical | Yes/No
`F E NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`F E NAP END` = "", # hms | HMS, HM, H [0-24h]
`W N N DAYS` = "", # integer | [0-7]
`W N BEDTIME` = "", # hms | HMS, HM, H [0-24h]
`W N SLEEP PREP` = "", # hms | HMS, HM, H [0-24h]
`W N SLEEP LAT` = "", # Duration | M
`W N SLEEP END` = "", # hms | HMS, HM, H [0-24h]
`W N TIME GU` = "", # Duration | M
`W N ALARM` = "", # logical | Yes/No
`W N REASONS` = "", # logical | Yes/No
`W N REASONS WHY` = "", # character
`W N NAP` = "", # logical | Yes/No
`W N NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`W N NAP END` = "", # hms | HMS, HM, H [0-24h]
`F N N DAYS` = "", # integer | [0-7]
`F N BEDTIME` = "", # hms | HMS, HM, H [0-24h]
`F N SLEEP PREP` = "", # hms | HMS, HM, H [0-24h]
`F N SLEEP LAT` = "", # Duration | M
`F N SLEEP END` = "", # hms | HMS, HM, H [0-24h]
`F N TIME GU` = "", # Duration | M
`F N ALARM` = "", # logical | Yes/No
`F N REASONS` = "", # logical | Yes/No
`F N REASONS WHY` = "", # character
`F N NAP` = "", # logical | Yes/No
`F N NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`F N NAP END` = "" # hms | HMS, HM, H [0-24h]
) |>
## All, or almost all, basic variables have the same values
dplyr::add_row(
`ID` = as.character(reserved_id[6]), # integer | [auto-increment]
`W M N DAYS` = "0", # integer | [0-7]
`W M BEDTIME` = "0", # hms | HMS, HM, H [0-24h]
`W M SLEEP PREP` = "0", # hms | HMS, HM, H [0-24h]
`W M SLEEP LAT` = "0", # Duration | M
`W M SLEEP END` = "0", # hms | HMS, HM, H [0-24h]
`W M TIME GU` = "0", # Duration | M
`W M ALARM` = "0", # logical | Yes/No
`W M REASONS` = "0", # logical | Yes/No
`W M REASONS WHY` = "0", # character
`W M NAP` = "0", # logical | Yes/No
`W M NAP ONSET` = "0", # hms | HMS, HM, H [0-24h]
`W M NAP END` = "0", # hms | HMS, HM, H [0-24h]
`F M N DAYS` = "0", # integer | [0-7]
`F M BEDTIME` = "0", # hms | HMS, HM, H [0-24h]
`F M SLEEP PREP` = "0", # hms | HMS, HM, H [0-24h]
`F M SLEEP LAT` = "0", # Duration | M
`F M SLEEP END` = "0", # hms | HMS, HM, H [0-24h]
`F M TIME GU` = "0", # Duration | M
`F M ALARM` = "0", # logical | Yes/No
`F M REASONS` = "0", # logical | Yes/No
`F M REASONS WHY` = "0", # character
`F M NAP` = "0", # logical | Yes/No
`F M NAP ONSET` = "0", # hms | HMS, HM, H [0-24h]
`F M NAP END` = "0", # hms | HMS, HM, H [0-24h]
`W E N DAYS` = "0", # integer | [0-7]
`W E BEDTIME` = "0", # hms | HMS, HM, H [0-24h]
`W E SLEEP PREP` = "0", # hms | HMS, HM, H [0-24h]
`W E SLEEP LAT` = "0", # Duration | M
`W E SLEEP END` = "0", # hms | HMS, HM, H [0-24h]
`W E TIME GU` = "0", # Duration | M
`W E ALARM` = "0", # logical | Yes/No
`W E REASONS` = "0", # logical | Yes/No
`W E REASONS WHY` = "0", # character
`W E NAP` = "0", # logical | Yes/No
`W E NAP ONSET` = "0", # hms | HMS, HM, H [0-24h]
`W E NAP END` = "0", # hms | HMS, HM, H [0-24h]
`F E N DAYS` = "0", # integer | [0-7]
`F E BEDTIME` = "0", # hms | HMS, HM, H [0-24h]
`F E SLEEP PREP` = "0", # hms | HMS, HM, H [0-24h]
`F E SLEEP LAT` = "0", # Duration | M
`F E SLEEP END` = "0", # hms | HMS, HM, H [0-24h]
`F E TIME GU` = "0", # Duration | M
`F E ALARM` = "0", # logical | Yes/No
`F E REASONS` = "0", # logical | Yes/No
`F E REASONS WHY` = "0", # character
`F E NAP` = "0", # logical | Yes/No
`F E NAP ONSET` = "0", # hms | HMS, HM, H [0-24h]
`F E NAP END` = "0", # hms | HMS, HM, H [0-24h]
`W N N DAYS` = "0", # integer | [0-7]
`W N BEDTIME` = "0", # hms | HMS, HM, H [0-24h]
`W N SLEEP PREP` = "0", # hms | HMS, HM, H [0-24h]
`W N SLEEP LAT` = "0", # Duration | M
`W N SLEEP END` = "0", # hms | HMS, HM, H [0-24h]
`W N TIME GU` = "0", # Duration | M
`W N ALARM` = "0", # logical | Yes/No
`W N REASONS` = "0", # logical | Yes/No
`W N REASONS WHY` = "0", # character
`W N NAP` = "0", # logical | Yes/No
`W N NAP ONSET` = "0", # hms | HMS, HM, H [0-24h]
`W N NAP END` = "0", # hms | HMS, HM, H [0-24h]
`F N N DAYS` = "0", # integer | [0-7]
`F N BEDTIME` = "0", # hms | HMS, HM, H [0-24h]
`F N SLEEP PREP` = "0", # hms | HMS, HM, H [0-24h]
`F N SLEEP LAT` = "0", # Duration | M
`F N SLEEP END` = "0", # hms | HMS, HM, H [0-24h]
`F N TIME GU` = "0", # Duration | M
`F N ALARM` = "0", # logical | Yes/No
`F N REASONS` = "0", # logical | Yes/No
`F N REASONS WHY` = "0", # character
`F N NAP` = "0", # logical | Yes/No
`F N NAP ONSET` = "0", # hms | HMS, HM, H [0-24h]
`F N NAP END` = "0" # hms | HMS, HM, H [0-24h]
) |>
## Suspicious values
dplyr::add_row(
`ID` = as.character(reserved_id[7]), # integer | [auto-increment]
`W M N DAYS` = "6", # integer | [0-7]
`W M BEDTIME` = "02:30", # hms | HMS, HM, H [0-24h] # SUSPICIOUS
`W M SLEEP PREP` = "04:00", # hms | HMS, HM, H [0-24h] # SUSPICIOUS
`W M SLEEP LAT` = "20", # Duration | M
`W M SLEEP END` = "04:45", # hms | HMS, HM, H [0-24h] # SUSPICIOUS
`W M TIME GU` = "5", # Duration | M
`W M ALARM` = "Yes", # logical | Yes/No
`W M REASONS` = "Yes", # logical | Yes/No
`W M REASONS WHY` = "Hobbies", # character
`W M NAP` = "Yes", # logical | Yes/No
`W M NAP ONSET` = "11:20", # hms | HMS, HM, H [0-24h]
`W M NAP END` = "11:45", # hms | HMS, HM, H [0-24h]
`F M N DAYS` = "2", # integer | [0-7]
`F M BEDTIME` = "11:00", # hms | HMS, HM, H [0-24h] # SUSPICIOUS
`F M SLEEP PREP` = "12:30", # hms | HMS, HM, H [0-24h] # SUSPICIOUS
`F M SLEEP LAT` = "30", # Duration | M
`F M SLEEP END` = "16:30", # hms | HMS, HM, H [0-24h] # SUSPICIOUS
`F M TIME GU` = "10", # Duration | M
`F M ALARM` = "No", # logical | Yes/No
`F M REASONS` = "No", # logical | Yes/No
`F M REASONS WHY` = "", # character
`F M NAP` = "Yes", # logical | Yes/No
`F M NAP ONSET` = "17:35", # hms | HMS, HM, H [0-24h]
`F M NAP END` = "18:05", # hms | HMS, HM, H [0-24h]
`W E N DAYS` = "4", # integer | [0-7]
`W E BEDTIME` = "00:30", # hms | HMS, HM, H [0-24h]
`W E SLEEP PREP` = "00:55", # hms | HMS, HM, H [0-24h]
`W E SLEEP LAT` = "10", # Duration | M
`W E SLEEP END` = "08:20", # hms | HMS, HM, H [0-24h]
`W E TIME GU` = "30", # Duration | M
`W E ALARM` = "Yes", # logical | Yes/No
`W E REASONS` = "No", # logical | Yes/No
`W E REASONS WHY` = "", # character
`W E NAP` = "No", # logical | Yes/No
`W E NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`W E NAP END` = "", # hms | HMS, HM, H [0-24h]
`F E N DAYS` = "2", # integer | [0-7]
`F E BEDTIME` = "01:00", # hms | HMS, HM, H [0-24h]
`F E SLEEP PREP` = "01:05", # hms | HMS, HM, H [0-24h]
`F E SLEEP LAT` = "30", # Duration | M
`F E SLEEP END` = "09:20", # hms | HMS, HM, H [0-24h]
`F E TIME GU` = "10", # Duration | M
`F E ALARM` = "No", # logical | Yes/No
`F E REASONS` = "Yes", # logical | Yes/No
`F E REASONS WHY` = "Hobbies", # character
`F E NAP` = "Yes", # logical | Yes/No
`F E NAP ONSET` = "10:00", # hms | HMS, HM, H [0-24h] # SUSPICIOUS
`F E NAP END` = "19:00", # hms | HMS, HM, H [0-24h] # SUSPICIOUS
`W N N DAYS` = "6", # integer | [0-7]
`W N BEDTIME` = "06:05", # hms | HMS, HM, H [0-24h]
`W N SLEEP PREP` = "06:50", # hms | HMS, HM, H [0-24h]
`W N SLEEP LAT` = "30", # Duration | M
`W N SLEEP END` = "16:05", # hms | HMS, HM, H [0-24h]
`W N TIME GU` = "30", # Duration | M
`W N ALARM` = "Yes", # logical | Yes/No
`W N REASONS` = "No", # logical | Yes/No
`W N REASONS WHY` = "", # character
`W N NAP` = "Yes", # logical | Yes/No
`W N NAP ONSET` = "03:30", # hms | HMS, HM, H [0-24h]
`W N NAP END` = "04:20", # hms | HMS, HM, H [0-24h]
`F N N DAYS` = "8", # integer | [0-7]
`F N BEDTIME` = "21:30", # hms | HMS, HM, H [0-24h]
`F N SLEEP PREP` = "21:55", # hms | HMS, HM, H [0-24h]
`F N SLEEP LAT` = "50", # Duration | M
`F N SLEEP END` = "01:55", # hms | HMS, HM, H [0-24h]
`F N TIME GU` = "40", # Duration | M
`F N ALARM` = "No", # logical | Yes/No
`F N REASONS` = "Yes", # logical | Yes/No
`F N REASONS WHY` = "Hobbies", # character
`F N NAP` = "No", # logical | Yes/No
`F N NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`F N NAP END` = "" # hms | HMS, HM, H [0-24h]
) |>
## Different formats
dplyr::add_row(
`ID` = as.character(reserved_id[8]), # integer | [auto-increment]
`W M N DAYS` = "6", # integer | [0-7]
`W M BEDTIME` = "11:25 PM", # hms | HMS, HM, H [0-24h] # AMBIGUOUS
`W M SLEEP PREP` = "2335", # hms | HMS, HM, H [0-24h] # AMBIGUOUS
`W M SLEEP LAT` = "30", # Duration | M
`W M SLEEP END` = "0415", # hms | HMS, HM, H [0-24h] # AMBIGUOUS
`W M TIME GU` = "5", # Duration | M
`W M ALARM` = "Yes", # logical | Yes/No
`W M REASONS` = "No", # logical | Yes/No
`W M REASONS WHY` = "", # character
`W M NAP` = "Yes", # logical | Yes/No
`W M NAP ONSET` = "15:55", # hms | HMS, HM, H [0-24h]
`W M NAP END` = "16:30", # hms | HMS, HM, H [0-24h]
`F M N DAYS` = "2", # integer | [0-7]
`F M BEDTIME` = "01:25", # hms | HMS, HM, H [0-24h]
`F M SLEEP PREP` = "01:50", # hms | HMS, HM, H [0-24h]
`F M SLEEP LAT` = "30", # Duration | M
`F M SLEEP END` = "08:05", # hms | HMS, HM, H [0-24h]
`F M TIME GU` = "65", # Duration | M
`F M ALARM` = "No", # logical | Yes/No
`F M REASONS` = "Yes", # logical | Yes/No
`F M REASONS WHY` = "Hobbies", # character
`F M NAP` = "No", # logical | Yes/No
`F M NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`F M NAP END` = "", # hms | HMS, HM, H [0-24h]
`W E N DAYS` = "4", # integer | [0-7]
`W E BEDTIME` = "11:10 PM", # hms | HMS, HM, H [0-24h] # AMBIGUOUS
`W E SLEEP PREP` = "23:40 PM", # hms | HMS, HM, H [0-24h]
`W E SLEEP LAT` = "30", # Duration | M
`W E SLEEP END` = "0545", # hms | HMS, HM, H [0-24h] # AMBIGUOUS
`W E TIME GU` = "30", # Duration | M
`W E ALARM` = "No", # logical | Yes/No
`W E REASONS` = "No", # logical | Yes/No
`W E REASONS WHY` = "", # character
`W E NAP` = "No", # logical | Yes/No
`W E NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`W E NAP END` = "", # hms | HMS, HM, H [0-24h]
`F E N DAYS` = "2", # integer | [0-7]
`F E BEDTIME` = "23:10", # hms | HMS, HM, H [0-24h]
`F E SLEEP PREP` = "00:15", # hms | HMS, HM, H [0-24h]
`F E SLEEP LAT` = "35", # Duration | M
`F E SLEEP END` = "08:45", # hms | HMS, HM, H [0-24h]
`F E TIME GU` = "5", # Duration | M
`F E ALARM` = "No", # logical | Yes/No
`F E REASONS` = "No", # logical | Yes/No
`F E REASONS WHY` = "", # character
`F E NAP` = "Yes", # logical | Yes/No
`F E NAP ONSET` = "17:20 PM", # hms | HMS, HM, H [0-24h]
`F E NAP END` = "18:00", # hms | HMS, HM, H [0-24h]
`W N N DAYS` = "6", # integer | [0-7]
`W N BEDTIME` = "07:10", # hms | HMS, HM, H [0-24h]
`W N SLEEP PREP` = "07:20", # hms | HMS, HM, H [0-24h]
`W N SLEEP LAT` = "15", # Duration | M
`W N SLEEP END` = "1240", # hms | HMS, HM, H [0-24h] # AMBIGUOUS
`W N TIME GU` = "20", # Duration | M
`W N ALARM` = "No", # logical | Yes/No
`W N REASONS` = "No", # logical | Yes/No
`W N REASONS WHY` = "", # character
`W N NAP` = "Yes", # logical | Yes/No
`W N NAP ONSET` = "23:45", # hms | HMS, HM, H [0-24h]
`W N NAP END` = "00:00", # hms | HMS, HM, H [0-24h]
`F N N DAYS` = "8", # integer | [0-7]
`F N BEDTIME` = "22:25", # hms | HMS, HM, H [0-24h]
`F N SLEEP PREP` = "22:50", # hms | HMS, HM, H [0-24h]
`F N SLEEP LAT` = "80", # Duration | M
`F N SLEEP END` = "10:55", # hms | HMS, HM, H [0-24h]
`F N TIME GU` = "35", # Duration | M
`F N ALARM` = "No", # logical | Yes/No
`F N REASONS` = "No", # logical | Yes/No
`F N REASONS WHY` = "", # character
`F N NAP` = "Yes", # logical | Yes/No
`F N NAP ONSET` = "17:50", # hms | HMS, HM, H [0-24h]
`F N NAP END` = "18:25" # hms | HMS, HM, H [0-24h]
) |>
## Possible filling error
dplyr::add_row(
`ID` = as.character(reserved_id[9]), # integer | [auto-increment]
`W M N DAYS` = "", # integer | [0-7]
`W M BEDTIME` = "", # hms | HMS, HM, H [0-24h]
`W M SLEEP PREP` = "", # hms | HMS, HM, H [0-24h]
`W M SLEEP LAT` = "", # Duration | M
`W M SLEEP END` = "", # hms | HMS, HM, H [0-24h]
`W M TIME GU` = "", # Duration | M
`W M ALARM` = "", # logical | Yes/No
`W M REASONS` = "", # logical | Yes/No
`W M REASONS WHY` = "", # character
`W M NAP` = "", # logical | Yes/No
`W M NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`W M NAP END` = "", # hms | HMS, HM, H [0-24h]
`F M N DAYS` = "2", # integer | [0-7]
`F M BEDTIME` = "23:40", # hms | HMS, HM, H [0-24h]
`F M SLEEP PREP` = "00:45", # hms | HMS, HM, H [0-24h]
`F M SLEEP LAT` = "45", # Duration | M
`F M SLEEP END` = "10:35", # hms | HMS, HM, H [0-24h]
`F M TIME GU` = "40", # Duration | M
`F M ALARM` = "No", # logical | Yes/No
`F M REASONS` = "No", # logical | Yes/No
`F M REASONS WHY` = "", # character
`F M NAP` = "No", # logical | Yes/No
`F M NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`F M NAP END` = "", # hms | HMS, HM, H [0-24h]
`W E N DAYS` = "", # integer | [0-7]
`W E BEDTIME` = "", # hms | HMS, HM, H [0-24h]
`W E SLEEP PREP` = "", # hms | HMS, HM, H [0-24h]
`W E SLEEP LAT` = "", # Duration | M
`W E SLEEP END` = "", # hms | HMS, HM, H [0-24h]
`W E TIME GU` = "", # Duration | M
`W E ALARM` = "", # logical | Yes/No
`W E REASONS` = "", # logical | Yes/No
`W E REASONS WHY` = "", # character
`W E NAP` = "", # logical | Yes/No
`W E NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`W E NAP END` = "", # hms | HMS, HM, H [0-24h]
`F E N DAYS` = "", # integer | [0-7]
`F E BEDTIME` = "", # hms | HMS, HM, H [0-24h]
`F E SLEEP PREP` = "", # hms | HMS, HM, H [0-24h]
`F E SLEEP LAT` = "", # Duration | M
`F E SLEEP END` = "", # hms | HMS, HM, H [0-24h]
`F E TIME GU` = "", # Duration | M
`F E ALARM` = "", # logical | Yes/No
`F E REASONS` = "", # logical | Yes/No
`F E REASONS WHY` = "", # character
`F E NAP` = "", # logical | Yes/No
`F E NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`F E NAP END` = "", # hms | HMS, HM, H [0-24h]
`W N N DAYS` = "6", # integer | [0-7]
`W N BEDTIME` = "07:40", # hms | HMS, HM, H [0-24h]
`W N SLEEP PREP` = "08:15", # hms | HMS, HM, H [0-24h]
`W N SLEEP LAT` = "35", # Duration | M
`W N SLEEP END` = "13:20", # hms | HMS, HM, H [0-24h]
`W N TIME GU` = "40", # Duration | M
`W N ALARM` = "No", # logical | Yes/No
`W N REASONS` = "No", # logical | Yes/No
`W N REASONS WHY` = "", # character
`W N NAP` = "No", # logical | Yes/No
`W N NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`W N NAP END` = "", # hms | HMS, HM, H [0-24h]
`F N N DAYS` = "", # integer | [0-7]
`F N BEDTIME` = "", # hms | HMS, HM, H [0-24h]
`F N SLEEP PREP` = "", # hms | HMS, HM, H [0-24h]
`F N SLEEP LAT` = "", # Duration | M
`F N SLEEP END` = "", # hms | HMS, HM, H [0-24h]
`F N TIME GU` = "", # Duration | M
`F N ALARM` = "", # logical | Yes/No
`F N REASONS` = "", # logical | Yes/No
`F N REASONS WHY` = "", # character
`F N NAP` = "", # logical | Yes/No
`F N NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`F N NAP END` = "" # hms | HMS, HM, H [0-24h]
) |>
## Repeated workdays and work-free days values (possible carryover
## effect)
dplyr::add_row(
`ID` = as.character(reserved_id[10]), # integer | [auto-increment]
`W M N DAYS` = "6", # integer | [0-7]
`W M BEDTIME` = "21:10", # hms | HMS, HM, H [0-24h]
`W M SLEEP PREP` = "21:40", # hms | HMS, HM, H [0-24h]
`W M SLEEP LAT` = "25", # Duration | M
`W M SLEEP END` = "04:45", # hms | HMS, HM, H [0-24h]
`W M TIME GU` = "10", # Duration | M
`W M ALARM` = "Yes", # logical | Yes/No
`W M REASONS` = "No", # logical | Yes/No
`W M REASONS WHY` = "", # character
`W M NAP` = "Yes", # logical | Yes/No
`W M NAP ONSET` = "11:25", # hms | HMS, HM, H [0-24h]
`W M NAP END` = "11:50", # hms | HMS, HM, H [0-24h]
`F M N DAYS` = "6", # integer | [0-7]
`F M BEDTIME` = "21:10", # hms | HMS, HM, H [0-24h]
`F M SLEEP PREP` = "21:40", # hms | HMS, HM, H [0-24h]
`F M SLEEP LAT` = "25", # Duration | M
`F M SLEEP END` = "04:45", # hms | HMS, HM, H [0-24h]
`F M TIME GU` = "10", # Duration | M
`F M ALARM` = "Yes", # logical | Yes/No
`F M REASONS` = "No", # logical | Yes/No
`F M REASONS WHY` = "", # character
`F M NAP` = "Yes", # logical | Yes/No
`F M NAP ONSET` = "11:25", # hms | HMS, HM, H [0-24h]
`F M NAP END` = "11:50", # hms | HMS, HM, H [0-24h]
`W E N DAYS` = "6", # integer | [0-7]
`W E BEDTIME` = "21:10", # hms | HMS, HM, H [0-24h]
`W E SLEEP PREP` = "21:40", # hms | HMS, HM, H [0-24h]
`W E SLEEP LAT` = "25", # Duration | M
`W E SLEEP END` = "04:45", # hms | HMS, HM, H [0-24h]
`W E TIME GU` = "10", # Duration | M
`W E ALARM` = "Yes", # logical | Yes/No
`W E REASONS` = "No", # logical | Yes/No
`W E REASONS WHY` = "", # character
`W E NAP` = "Yes", # logical | Yes/No
`W E NAP ONSET` = "11:25", # hms | HMS, HM, H [0-24h]
`W E NAP END` = "11:50", # hms | HMS, HM, H [0-24h]
`F E N DAYS` = "6", # integer | [0-7]
`F E BEDTIME` = "21:10", # hms | HMS, HM, H [0-24h]
`F E SLEEP PREP` = "21:40", # hms | HMS, HM, H [0-24h]
`F E SLEEP LAT` = "25", # Duration | M
`F E SLEEP END` = "04:45", # hms | HMS, HM, H [0-24h]
`F E TIME GU` = "10", # Duration | M
`F E ALARM` = "Yes", # logical | Yes/No
`F E REASONS` = "No", # logical | Yes/No
`F E REASONS WHY` = "", # character
`F E NAP` = "Yes", # logical | Yes/No
`F E NAP ONSET` = "11:25", # hms | HMS, HM, H [0-24h]
`F E NAP END` = "11:50", # hms | HMS, HM, H [0-24h]
`W N N DAYS` = "6", # integer | [0-7]
`W N BEDTIME` = "21:10", # hms | HMS, HM, H [0-24h]
`W N SLEEP PREP` = "21:40", # hms | HMS, HM, H [0-24h]
`W N SLEEP LAT` = "25", # Duration | M
`W N SLEEP END` = "04:45", # hms | HMS, HM, H [0-24h]
`W N TIME GU` = "10", # Duration | M
`W N ALARM` = "Yes", # logical | Yes/No
`W N REASONS` = "No", # logical | Yes/No
`W N REASONS WHY` = "", # character
`W N NAP` = "Yes", # logical | Yes/No
`W N NAP ONSET` = "11:25", # hms | HMS, HM, H [0-24h]
`W N NAP END` = "11:50", # hms | HMS, HM, H [0-24h]
`F N N DAYS` = "6", # integer | [0-7]
`F N BEDTIME` = "21:10", # hms | HMS, HM, H [0-24h]
`F N SLEEP PREP` = "21:40", # hms | HMS, HM, H [0-24h]
`F N SLEEP LAT` = "25", # Duration | M
`F N SLEEP END` = "04:45", # hms | HMS, HM, H [0-24h]
`F N TIME GU` = "10", # Duration | M
`F N ALARM` = "Yes", # logical | Yes/No
`F N REASONS` = "No", # logical | Yes/No
`F N REASONS WHY` = "", # character
`F N NAP` = "Yes", # logical | Yes/No
`F N NAP ONSET` = "11:25", # hms | HMS, HM, H [0-24h]
`F N NAP END` = "11:50", # hms | HMS, HM, H [0-24h]
) |>
## Sleep onset is equal or greater than sleep end
## [(s_prep + s_lat) >= se]
dplyr::add_row(
`ID` = as.character(reserved_id[11]), # integer | [auto-increment]
`W M N DAYS` = "6", # integer | [0-7]
`W M BEDTIME` = "22:00", # hms | HMS, HM, H [0-24h]
`W M SLEEP PREP` = "22:50", # hms | HMS, HM, H [0-24h]
`W M SLEEP LAT` = "15", # Duration | M
`W M SLEEP END` = "04:15", # hms | HMS, HM, H [0-24h]
`W M TIME GU` = "15", # Duration | M
`W M ALARM` = "No", # logical | Yes/No
`W M REASONS` = "No", # logical | Yes/No
`W M REASONS WHY` = "", # character
`W M NAP` = "Yes", # logical | Yes/No
`W M NAP ONSET` = "13:35", # hms | HMS, HM, H [0-24h]
`W M NAP END` = "14:00", # hms | HMS, HM, H [0-24h]
`F M N DAYS` = "2", # integer | [0-7]
`F M BEDTIME` = "05:30", # hms | HMS, HM, H [0-24h]
`F M SLEEP PREP` = "07:00", # hms | HMS, HM, H [0-24h] # ERROR
`F M SLEEP LAT` = "45", # Duration | M # ERROR
`F M SLEEP END` = "07:45", # hms | HMS, HM, H [0-24h] # ERROR
`F M TIME GU` = "20", # Duration | M
`F M ALARM` = "Yes", # logical | Yes/No
`F M REASONS` = "No", # logical | Yes/No
`F M REASONS WHY` = "", # character
`F M NAP` = "No", # logical | Yes/No
`F M NAP ONSET` = "", # hms | HMS, HM, H [0-24h]
`F M NAP END` = "", # hms | HMS, HM, H [0-24h]
`W E N DAYS` = "4", # integer | [0-7]
`W E BEDTIME` = "23:35", # hms | HMS, HM, H [0-24h]
`W E SLEEP PREP` = "23:35", # hms | HMS, HM, H [0-24h]
`W E SLEEP LAT` = "40", # Duration | M
`W E SLEEP END` = "06:55", # hms | HMS, HM, H [0-24h]
`W E TIME GU` = "25", # Duration | M
`W E ALARM` = "Yes", # logical | Yes/No
`W E REASONS` = "No", # logical | Yes/No
`W E REASONS WHY` = "", # character
`W E NAP` = "Yes", # logical | Yes/No
`W E NAP ONSET` = "17:00", # hms | HMS, HM, H [0-24h]
`W E NAP END` = "17:40", # hms | HMS, HM, H [0-24h]
`F E N DAYS` = "2", # integer | [0-7]
`F E BEDTIME` = "10:05", # hms | HMS, HM, H [0-24h]
`F E SLEEP PREP` = "12:10", # hms | HMS, HM, H [0-24h] # ERROR
`F E SLEEP LAT` = "5", # Duration | M # ERROR
`F E SLEEP END` = "11:00", # hms | HMS, HM, H [0-24h] # ERROR
`F E TIME GU` = "25", # Duration | M
`F E ALARM` = "No", # logical | Yes/No
`F E REASONS` = "No", # logical | Yes/No
`F E REASONS WHY` = "", # character
`F E NAP` = "Yes", # logical | Yes/No
`F E NAP ONSET` = "17:35", # hms | HMS, HM, H [0-24h]
`F E NAP END` = "17:55", # hms | HMS, HM, H [0-24h]
`W N N DAYS` = "6", # integer | [0-7]
`W N BEDTIME` = "07:20", # hms | HMS, HM, H [0-24h]
`W N SLEEP PREP` = "07:45", # hms | HMS, HM, H [0-24h]
`W N SLEEP LAT` = "20", # Duration | M
`W N SLEEP END` = "12:45", # hms | HMS, HM, H [0-24h]
`W N TIME GU` = "15", # Duration | M
`W N ALARM` = "No", # logical | Yes/No
`W N REASONS` = "Yes", # logical | Yes/No
`W N REASONS WHY` = "Hobbies", # character
`W N NAP` = "Yes", # logical | Yes/No
`W N NAP ONSET` = "04:05", # hms | HMS, HM, H [0-24h]
`W N NAP END` = "04:30", # hms | HMS, HM, H [0-24h]
`F N N DAYS` = "8", # integer | [0-7]
`F N BEDTIME` = "19:40", # hms | HMS, HM, H [0-24h]
`F N SLEEP PREP` = "20:25", # hms | HMS, HM, H [0-24h]
`F N SLEEP LAT` = "55", # Duration | M
`F N SLEEP END` = "04:40", # hms | HMS, HM, H [0-24h]
`F N TIME GU` = "20", # Duration | M
`F N ALARM` = "No", # logical | Yes/No
`F N REASONS` = "No", # logical | Yes/No
`F N REASONS WHY` = "", # character
`F N NAP` = "Yes", # logical | Yes/No
`F N NAP ONSET` = "14:05", # hms | HMS, HM, H [0-24h]
`F N NAP END` = "14:45" # hms | HMS, HM, H [0-24h]
)
shift_mctq <-
shift_mctq %>% # Don't change the pipe.
dplyr::arrange(as.integer(.data$`ID`))
# Write and return output -----
if (isTRUE(write)) {
if (!(dir.exists("./inst/extdata/"))) dir.create("./inst/extdata/")
shift_mctq |>
utils::write.csv(
paste0("./inst/extdata/", "shift_mctq", ".csv"),
row.names = FALSE,
quote = FALSE
)
}
invisible(shift_mctq)
}
#' Tidy `build_shift_mctq()` output
#'
#' @description
#'
#' `tidy_shift_mctq` tidy the output of `build_shift_mctq()`. See
#' [`?shift_mctq`][mctq::shift_mctq] to learn more.
#'
#' @details
#'
#' Here, the process of _tiding_ a dataset is understood as transforming it in
#' input data, like described in Loo and Jonge (2018). It's a very similar
#' process of tiding data described in the workflow proposed by Wickham and
#' Grolemund (n.d.).
#'
#' Please note that input data is not the same as valid data. To get a valid
#' `shift_mctq` data, run `validate_shift_mctq()`.
#'
#' To learn more about the concept of tidy data, see Wickham (2014) and
#' Wickham and Grolemund (n.d.).
#'
#' @param write (optional) a [`logical`][base::logical()] value indicating if
#' the function must write a `shift_mctq.rda` file to `"./data/"` (default:
#' `FALSE`).
#'
#' @return An invisible [`tibble`][dplyr::tibble()] with a tidied, but not
#' validated, MCTQ\eqn{^{Shift}}{ Shift} dataset.
#'
#' @template references_e
#' @family data functions
#' @importFrom magrittr %>%
#' @importFrom rlang .data !! :=
#' @noRd
#'
#' @examples
#' \dontrun{
#' \dontrun{
#' if (requireNamespace("utils", quietly = TRUE)) {
#' utils::View(tidy_shift_mctq())
#' }
#' }
tidy_shift_mctq <- function(write = FALSE) {
# Check arguments -----
checkmate::assert_flag(write)
# Set values -----
shift_mctq <- build_shift_mctq()
# Clean NULL cases -----
fix_character <- function(x) {
x <- trimws(x)
for (i in c("", "NA")) {
x <- dplyr::na_if(x, i)
}
x
}
shift_mctq <-
shift_mctq |>
dplyr::mutate(dplyr::across(.fns = fix_character)) |>
dplyr::rowwise() |>
dplyr::mutate(
length = dplyr::n_distinct(dplyr::c_across(-.data$ID))
) %>% # Don't change the pipe.
dplyr::mutate(dplyr::across(
-.data$ID,
.fns = ~ ifelse(length <= 2, NA, .x)
)
) |>
dplyr::ungroup() |>
dplyr::select(-length)
# Convert columns -----
pattern_1 <- "^([-+])?(2[4-9]|[3-9]\\d|\\d{3,})(:)?[0-5]\\d((:)?[0-5]\\d)?"
values <- list(
w_m = c("W M", "_w_m"),
f_m = c("F M", "_f_m"),
w_e = c("W E", "_w_e"),
f_r = c("F E", "_f_e"),
w_n = c("W N", "_w_n"),
f_n = c("F N", "_f_n")
)
shift_mctq <- # Don't change the pipe.
shift_mctq %>%
dplyr::mutate(id = as.integer(.data$`ID`)) %>%
dplyr::select(-.data$`ID`) %>%
dplyr::relocate(.data$id, .before = .data$`W M N DAYS`)
for (i in values) {
shift_mctq <-
shift_mctq %>% # Don't change the pipe.
dplyr::mutate(
!!as.symbol(paste0("n", i[2])) :=
as.integer(.data[[paste(i[1], "N DAYS")]]),
!!as.symbol(paste0("bt", i[2])) :=
mctq:::shush(hms::as_hms(lubridate::parse_date_time(
.data[[paste(i[1], "BEDTIME")]], c("HM", "IMp")
))),
!!as.symbol(paste0("sprep", i[2])) := dplyr::case_when(
grepl(
pattern_1, .data[[paste(i[1], "SLEEP PREP")]],
perl = TRUE
) ~ mctq:::shush(hms::as_hms(lubridate::parse_date_time(
.data[[paste(i[1], "SLEEP PREP")]], "HM"
)
)),
TRUE ~ mctq:::shush(hms::as_hms(lubridate::parse_date_time(
.data[[paste(i[1], "SLEEP PREP")]], c("HM", "IMp")
)
))
),
!!as.symbol(paste0("slat", i[2])) :=
mctq:::shush(lubridate::dminutes(as.numeric(
.data[[paste(i[1], "SLEEP LAT")]]
))),
!!as.symbol(paste0("se", i[2])) := dplyr::case_when(
grepl(
pattern_1, .data[[paste(i[1], "SLEEP END")]],
perl = TRUE
) ~ mctq:::shush(hms::as_hms(lubridate::parse_date_time(
.data[[paste(i[1], "SLEEP END")]], "HM"
))),
TRUE ~ mctq:::shush(hms::as_hms(lubridate::parse_date_time(
.data[[paste(i[1], "SLEEP END")]], c("HM", "IMp")
)))
),
!!as.symbol(paste0("tgu", i[2])) :=
mctq:::shush(lubridate::dminutes(as.numeric(
.data[[paste(i[1], "TIME GU")]]
))),
!!as.symbol(paste0("alarm", i[2])) := dplyr::case_when(
tolower(.data[[paste(i[1], "ALARM")]]) == "yes" ~ TRUE,
tolower(.data[[paste(i[1], "ALARM")]]) == "no" ~ FALSE
),
!!as.symbol(paste0("reasons", i[2])) := dplyr::case_when(
tolower(.data[[paste(i[1], "REASONS")]]) == "yes" ~ TRUE,
tolower(.data[[paste(i[1], "REASONS")]]) == "no" ~ FALSE
),
!!as.symbol(paste0("reasons_why", i[2])) :=
.data[[paste(i[1], "REASONS WHY")]],
!!as.symbol(paste0("nap", i[2])) := dplyr::case_when(
tolower(.data[[paste(i[1], "NAP")]]) == "yes" ~ TRUE,
tolower(.data[[paste(i[1], "NAP")]]) == "no" ~ FALSE
),
!!as.symbol(paste0("napo", i[2])) :=
mctq:::shush(hms::as_hms(lubridate::parse_date_time(
.data[[paste(i[1], "NAP ONSET")]], c("HM", "IMp")
))),
!!as.symbol(paste0("nape", i[2])) :=
mctq:::shush(hms::as_hms(lubridate::parse_date_time(
.data[[paste(i[1], "NAP END")]], c("HM", "IMp")
)))
) |>
dplyr::select(-dplyr::starts_with(i[1]))
}
# Write and output dataset -----
if (isTRUE(write)) usethis::use_data(shift_mctq, overwrite = TRUE)
invisible(shift_mctq)
}
#' Validate `tidy_shift_mctq()` output
#'
#' @description
#'
#' `validate_shift_mctq()` validates the output of `tidy_shift_mctq()`.
#' See [`?shift_mctq`][mctq::shift_mctq] to learn more.
#'
#' @details
#'
#' Here, the process of _validating_ a dataset is understood as detecting
#' invalid data, by checking whether data satisfies certain assumptions from
#' domain knowledge, to them, removing or, if possible, fixing them. You can
#' find more about data validation and error location in Loo and Jonge (2018).
#'
#' This process can be considered as part of the process of transforming data,
#' described in the workflow proposed by Wickham and Grolemund (n.d.).
#'
#' @return An invisible [`tibble`][dplyr::tibble()] with a validated
#' MCTQ\eqn{^{Shift}}{ Shift} dataset.
#'
#' @inheritParams tidy_shift_mctq
#' @template references_d
#' @family data functions
#' @importFrom magrittr %>%
#' @importFrom rlang .data := !!
#' @noRd
#'
#' @examples
#' \dontrun{
#' if (requireNamespace("utils", quietly = TRUE)) {
#' utils::View(validate_shift_mctq())
#' }
#' }
validate_shift_mctq <- function(write = FALSE) {
# TODO -----
#
# * Adapt this process by using `errorlocate` package with `validate`.
# Check arguments -----
checkmate::assert_flag(write)
# Set values -----
set.seed(1)
reserved_id <- sample(50, 11)
shift_mctq <- tidy_shift_mctq()
# Do univariate validation -----
hms_0 <- hms::parse_hm("00:00")
hms_24 <- hms::parse_hm("24:00")
duration_0 <- lubridate::dhours(0)
duration_6 <- lubridate::dhours(6)
validate_hms <- function(x) {
dplyr::case_when(
x == hms_24 ~ hms_0,
x >= hms_0 & x < hms_24 ~ x
)
}
validate_duration <- function(x) {
dplyr::case_when(
validate::in_range(x, min = duration_0, max = duration_6) ~ x
)
}
cols_1 <- stringr::str_subset(names(shift_mctq),
"^bt|^sprep|^se|^napo|^nape")
cols_2 <- stringr::str_subset(names(shift_mctq), "^slat|^tgu")
shift_mctq <-
shift_mctq |>
dplyr::mutate(
dplyr::across(dplyr::all_of(cols_1), validate_hms),
dplyr::across(dplyr::all_of(cols_2), validate_duration)
)
# Do multivariate validation -----
for (i in c("_w_m", "_f_m", "_w_e", "_f_e", "_w_n", "_f_n")) {
bt_i <- paste0("bt", i)
sprep_i <- paste0("sprep", i)
shift_mctq <-
shift_mctq |>
dplyr::mutate(
dummy = dplyr::case_when(
mctq::assign_date(!!as.symbol(bt_i), !!as.symbol(sprep_i)) >
lubridate::dhours(12) ~ TRUE,
TRUE ~ FALSE
),
bkp = !!as.symbol(bt_i),
!!as.symbol(bt_i) := dplyr::if_else(
dummy, !!as.symbol(sprep_i), !!as.symbol(bt_i)
),
!!as.symbol(sprep_i) := dplyr::if_else(
dummy, bkp, !!as.symbol(sprep_i)
)
) |>
dplyr::select(-dummy, -bkp)
}
for (i in c("_w_m", "_f_m", "_w_e", "_f_e", "_w_n", "_f_n")) {
sprep_i <- paste0("sprep", i)
slat_i <- paste0("slat", i)
se_i <- paste0("se", i)
test <-
shift_mctq |>
dplyr::mutate(
so_i = mctq::so(!!as.symbol(sprep_i), !!as.symbol(slat_i)),
sd_i = mctq::sdu(so_i, !!as.symbol(se_i)),
dummy = dplyr::case_when(
sd_i < lubridate::dhours(2) |
sd_i > lubridate::dhours(18) ~ TRUE,
TRUE ~ FALSE
)
) |>
dplyr::select(dummy)
shift_mctq <-
dplyr::bind_cols(shift_mctq, test) |>
dplyr::mutate(
dplyr::across(
dplyr::ends_with(i),
~ dplyr::if_else(dummy, rutils:::na_as(.x), .x)
)
) |>
dplyr::select(-dummy)
}
# Clean invalid cases -----
## Cases: "Suspicious values" and "Repeated workdays and work-free days
## values (possible carryover effect)"
invalid <- c(reserved_id[7], reserved_id[10]) # nolint
shift_mctq <-
shift_mctq |>
dplyr::rowwise() %>% # Don't change the pipe.
dplyr::mutate(
dplyr::across(
-.data$id,
.fns = ~ dplyr::if_else(.data$id %in% invalid, rutils:::na_as(.x), .x)
)
) |>
dplyr::ungroup()
# Fix/impute linked data -----
for (i in c("_w_m", "_f_m", "_w_e", "_f_e", "_w_n", "_f_n")) {
shift_mctq <-
shift_mctq |>
dplyr::mutate(
!!as.symbol(paste0("reasons_why", i)) := dplyr::case_when(
!!as.symbol(paste0("reasons_why", i)) == "no" ~
as.character(NA),
TRUE ~ !!as.symbol(paste0("reasons_why", i))
),
!!as.symbol(paste0("reasons", i)) := dplyr::case_when(
!is.na(!!as.symbol(paste0("reasons_why", i))) ~ TRUE,
TRUE ~ !!as.symbol(paste0("reasons", i))
)
)
}
# Write and output dataset -----
if (isTRUE(write)) usethis::use_data(shift_mctq, overwrite = TRUE)
invisible(shift_mctq)
}
#' Analyze `validate_shift_mctq()` output
#'
#' @description
#'
#' `analyse_shift_mctq()` computes and creates the non-measured MCTQ variables
#' based on the output of `validate_shift_mctq()`. See
#' [`?shift_mctq`][mctq::shift_mctq] to learn more.
#'
#' @details
#'
#' Computing and creating new variables is part of the process of producing
#' statistics, like described in Loo and Jonge (2018). It's also a part of the
#' process of transforming data, described in the workflow proposed by Wickham
#' and Grolemund (n.d.).
#'
#' @return An invisible [`tibble`][dplyr::tibble()] with all the variables
#' proposed for a MCTQ\eqn{^{Shift}}{ Shift} dataset.
#'
#' @inheritParams tidy_shift_mctq
#' @inheritParams pretty_mctq
#' @template references_d
#' @family data functions
#' @importFrom magrittr %>%
#' @importFrom rlang .data !! :=
#' @noRd
#'
#' @examples
#' \dontrun{
#' if (requireNamespace("utils", quietly = TRUE)) {
#' utils::View(analyze_shift_mctq())
#' }
#' }
analyze_shift_mctq <- function(write = FALSE, round = TRUE, hms = FALSE) {
# Check arguments -----
checkmate::assert_flag(write)
checkmate::assert_flag(round)
checkmate::assert_flag(hms)
# Set values -----
shift_mctq <- validate_shift_mctq()
# Create computed variables -----
for (i in c("_w_m", "_f_m", "_w_e", "_f_e", "_w_n", "_f_n")) {
ms <- paste0("ms", stringr::str_extract(i, "._.$"))
shift_mctq <-
shift_mctq |>
dplyr::mutate(
!!as.symbol(paste0("so", i)) :=
mctq::so(!!as.symbol(paste0("sprep", i)),
!!as.symbol(paste0("slat", i))),
!!as.symbol(paste0("gu", i)) :=
mctq::gu(!!as.symbol(paste0("se", i)),
!!as.symbol(paste0("tgu", i))),
!!as.symbol(paste0("sd", i)) :=
mctq::sdu(!!as.symbol(paste0("so", i)),
!!as.symbol(paste0("se", i))),
!!as.symbol(paste0("tbt", i)) :=
mctq::tbt(!!as.symbol(paste0("bt", i)),
!!as.symbol(paste0("gu", i))),
!!as.symbol(ms) :=
mctq::msl(!!as.symbol(paste0("so", i)),
!!as.symbol(paste0("sd", i))),
!!as.symbol(paste0("napd", i)) :=
mctq::napd(!!as.symbol(paste0("napo", i)),
!!as.symbol(paste0("nape", i))),
!!as.symbol(paste0("sd24", i)) :=
mctq::sd24(!!as.symbol(paste0("sd", i)),
!!as.symbol(paste0("napd", i)),
!!as.symbol(paste0("nap", i)))
)
}
for (i in c("_m", "_e", "_n")) {
shift_mctq <-
shift_mctq |>
dplyr::mutate(
!!as.symbol(paste0("sd_overall", i)) :=
mctq::sd_overall(!!as.symbol(paste0("sd_w", i)),
!!as.symbol(paste0("sd_f", i)),
!!as.symbol(paste0("n_w", i)),
!!as.symbol(paste0("n_f", i))),
!!as.symbol(paste0("msf_sc", i)) :=
mctq::msf_sc(!!as.symbol(paste0("msf", i)),
!!as.symbol(paste0("sd_w", i)),
!!as.symbol(paste0("sd_f", i)),
!!as.symbol(paste0("sd_overall", i)),
!!as.symbol(paste0("alarm_f", i))),
!!as.symbol(paste0("sjl_rel", i)) :=
mctq::sjl_rel(!!as.symbol(paste0("msw", i)),
!!as.symbol(paste0("msf", i))),
!!as.symbol(paste0("sjl", i)) :=
abs(!!as.symbol(paste0("sjl_rel", i))),
!!as.symbol(paste0("sjl_sc_rel", i)) :=
mctq::sjl_sc_rel(!!as.symbol(paste0("so_w", i)),
!!as.symbol(paste0("se_w", i)),
!!as.symbol(paste0("so_f", i)),
!!as.symbol(paste0("se_f", i))),
!!as.symbol(paste0("sjl_sc", i)) :=
abs(!!as.symbol(paste0("sjl_sc_rel", i)))
)
}
shift_mctq <-
shift_mctq |>
dplyr::mutate(
sjl_weighted = mctq::sjl_weighted(
sjl = list(sjl_m = sjl_m, sjl_e = sjl_e, sjl_n = sjl_n),
n = list(n_w_m = n_w_m, n_w_e = n_w_e, n_w_n = n_w_n)
),
sjl_sc_weighted = mctq::sjl_weighted(
sjl = list(sjl_sc_m = sjl_sc_m, sjl_sc_e = sjl_sc_e,
sjl_sc_n = sjl_sc_n),
n = list(n_w_m = n_w_m, n_w_e = n_w_e, n_w_n = n_w_n)
)
) |>
dplyr::relocate(
id,
n_w_m, bt_w_m, sprep_w_m, slat_w_m, so_w_m, se_w_m, tgu_w_m,
gu_w_m, alarm_w_m, reasons_w_m, reasons_why_w_m, sd_w_m, tbt_w_m,
msw_m, nap_w_m, napo_w_m, nape_w_m, napd_w_m, sd24_w_m,
n_f_m, bt_f_m, sprep_f_m, slat_f_m, so_f_m, se_f_m, tgu_f_m,
gu_f_m, alarm_f_m, reasons_f_m, reasons_why_f_m, sd_f_m, tbt_f_m,
msf_m, nap_f_m, napo_f_m, nape_f_m, napd_f_m, sd24_f_m,
sd_overall_m, msf_sc_m, sjl_rel_m, sjl_m, sjl_sc_rel_m, sjl_sc_m,
n_w_e, bt_w_e, sprep_w_e, slat_w_e, so_w_e, se_w_e, tgu_w_e,
gu_w_e, alarm_w_e, reasons_w_e, reasons_why_w_e, sd_w_e, tbt_w_e,
msw_e, nap_w_e, napo_w_e, nape_w_e, napd_w_e, sd24_w_e,
n_f_e, bt_f_e, sprep_f_e, slat_f_e, so_f_e, se_f_e, tgu_f_e,
gu_f_e, alarm_f_e, reasons_f_e, reasons_why_f_e, sd_f_e, tbt_f_e,
msf_e, nap_f_e, napo_f_e, nape_f_e, napd_f_e, sd24_f_e,
sd_overall_e, msf_sc_e, sjl_rel_e, sjl_e, sjl_sc_rel_e, sjl_sc_e,
n_w_n, bt_w_n, sprep_w_n, slat_w_n, so_w_n, se_w_n, tgu_w_n,
gu_w_n, alarm_w_n, reasons_w_n, reasons_why_w_n, sd_w_n, tbt_w_n,
msw_n, nap_w_n, napo_w_n, nape_w_n, napd_w_n, sd24_w_n,
n_f_n, bt_f_n, sprep_f_n, slat_f_n, so_f_n, se_f_n, tgu_f_n,
gu_f_n, alarm_f_n, reasons_f_n, reasons_why_f_n, sd_f_n, tbt_f_n,
msf_n, nap_f_n, napo_f_n, nape_f_n, napd_f_n, sd24_f_n,
sd_overall_n, msf_sc_n, sjl_rel_n, sjl_n, sjl_sc_rel_n, sjl_sc_n,
sjl_weighted, sjl_sc_weighted
)
# Apply corrections to `sjl_rel` and `sjl` -----
## Helper:
## shift_mctq_hms <- pretty_mctq(shift_mctq)
## test <- dplyr::select(shift_mctq_hms, msf_m, msw_m, sjl_rel_m)
cases <- c(39)
shift_mctq <-
shift_mctq |>
dplyr::rowwise() %>% # Don't change the pipe.
dplyr::mutate(
sjl_rel_n = dplyr::if_else(
.data$id %in% cases,
sjl_rel(.data$msw_n, .data$msf_n, method = "longer"),
.data$sjl_rel_n
),
sjl_sc_rel_n = dplyr::if_else(
.data$id %in% cases,
sjl_sc_rel(.data$so_w_n, .data$se_w_n, .data$so_f_n,
.data$se_f_n, method = "longer"),
.data$sjl_sc_rel_n
)
) |>
dplyr::ungroup() %>% # Don't change the pipe.
dplyr::mutate(
sjl_n = abs(.data$sjl_rel_n),
sjl_sc_n = abs(.data$sjl_sc_rel_n)
)
# Make MCTQ pretty -----
shift_mctq <-
shift_mctq |>
pretty_mctq(round = round, hms = hms)
# Write and output dataset -----
if (isTRUE(write)) usethis::use_data(shift_mctq, overwrite = TRUE)
invisible(shift_mctq)
}
# raw <- build_shift_mctq()
# tidy <- tidy_shift_mctq()
# valid <- validate_shift_mctq()
# analysis <- analyze_shift_mctq()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.