#' Get responses from DCVTS limesurvey panel.
#' @description `dcvts_getresponses()` fetches responses from DCVTS's limesurvey panel and transforms the data into easily analysable "tidy" format.
#' @param round DCVTS Round. This can be `r1`, `r2` or `r3`.
#' @param status Status of the Interview. `status` is defined as per Limesurvey's convention (This is *not* the final interview result code). Values can be `all`, `complete` or `incomplete`.
#' @param ... Extra parameters. You will likely not need this.
#' @details Sometimes this might take longer depending on your connection.
#' @import dplyr
#' @importFrom readr parse_number
#' @importFrom janitor clean_names
#' @importFrom lubridate as_datetime is.POSIXct date ymd_hms
#' @importFrom limer get_responses
#' @importFrom stringr str_to_title
#' @importFrom rlang .data
#' @export
#' @return A tibble.
#' @examples
#' \dontrun{
#' dcvts_getresponses("r2", "all")
#' dcvts_getresponses("r2", "incomplete")
#' dcvts_getresponses("r1", "complete")
#' }
dcvts_getresponses <- function(round, status, ...) {
# TODO add further rounds here
round_id <- case_when(round == "r1" ~ 21,
round == "r2" ~ 23,
round == "r3" ~ 31)
if (status == "all" & (round == "r1" | round == "r2")) {
# binding complete and incomplete responses to one table
df_responses_raw <- dplyr::bind_rows("complete" = get_responses(iSurveyID = round_id, sCompletionStatus = "complete", ...),
"incomplete" = get_responses(iSurveyID = round_id, sCompletionStatus = "incomplete", ...),
.id = "status") %>%
clean_names()
}
else if (status == "all" & (round == "r3")) {
# binding complete and incomplete responses to one table
df_responses_raw <- dplyr::bind_rows("complete" = get_responses(iSurveyID = round_id, sCompletionStatus = "complete", ...),
"incomplete" = get_responses(iSurveyID = round_id, sCompletionStatus = "incomplete", ...) %>%
clean_names() %>%
mutate(wm3_sq001comment = as.character(.data$wm3_sq001comment),
wm3_sq002comment = as.character(.data$wm3_sq002comment),
wm3_sq003comment = as.character(.data$wm3_sq003comment)),
.id = "status")
}
else {
df_responses_raw <- get_responses(iSurveyID = round_id, sCompletionStatus = status, ...) %>%
clean_names()
}
df_responses <- df_responses_raw %>%
clean_names %>%
as_tibble() %>%
rename(responseid = .data$i_id, submitdatetime = .data$submitdate, startdatetime = .data$startdate, enddatetime = .data$datestamp) %>%
mutate_at(vars(contains("datetime")), as_datetime) %>%
mutate(iwstat = case_when(status == "incomplete" ~ "incomplete interview",
id5 == "Confirmed, Wrong Household" ~ "wrong household",
id11 == "No, refused" ~ "appointment refusal",
TRUE ~ "complete interview")) %>%
mutate_if(is.POSIXct, as.character) %>%
mutate(iwstartdate = date(.data$startdatetime),
iwenddate = date(.data$enddatetime),
iwsubmitdate = date(.data$submitdatetime),
ndays = parse_number(as.character(.data$iwenddate - .data$iwstartdate))) %>%
mutate(respondent_age = case_when(!is.na(.data$id3) ~ .data$id3,
!is.na(.data$id7) & .data$id7 >= 18 ~ .data$id7)) %>%
mutate_at(vars(matches("datetime")), ymd_hms) %>%
select(.data$iwstat, everything())
return(df_responses)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.