Codebook example with Qualtrics dataset"

knit_by_pkgdown <- !is.null(knitr::opts_chunk$get("fig.retina"))
knitr::opts_chunk$set(warning = FALSE, message = FALSE, error = FALSE, echo = TRUE)
ggplot2::theme_set(ggplot2::theme_bw())
library(codebook)
library(dplyr)

Here, I try to demonstrate that we can also use the metadata generated by Qualtrics. Because I am not a Qualtrics user, the developer of the qualtRics R package sent me two example files, one of data and one for metadata, which I use here. Usually, you'd import these files directly via his package.

Load

# library(qualtRics) # currently not on CRAN, so commented out
results <- readRDS(system.file("extdata", "ryan.rds", package = "codebook"))
metadata_ex <- readRDS(system.file("extdata", "metadata.rds", package = "codebook"))

Now, we want the metadata not to be just independent of the data frame. It's easier to change metadata if it is in the form of a list at the dataset level, so let's use rio::gather_attrs for that.

results <- results %>% rio::gather_attrs()
attributes(results)$label$Q7

Now, we can loop over the metadata list and put it in the right shape to become attributes. This means given each element the name of the variable it refers to.

names(metadata_ex$questions) <- lapply(metadata_ex$questions, function(x) {
  x$questionName
})

We only want the questions that we have data for.

qs <- names(metadata_ex$questions)
qs <- qs[qs %in% names(attributes(results)$label)]

Now, we assign our metadata list to the attributes of the data.frame.

init <- vector("list", ncol(results)) 
names(init) <- names(results)
attributes(results)$item <- init
attributes(results)$item[qs] <- metadata_ex$questions[qs]

And use rio to put the attributes on the question level again.

results <- results %>% rio::spread_attrs()

To keep this example, we select a subset of variables.

results <- results %>% select(ResponseSet, Q7, Q10)
if (!knit_by_pkgdown) knitr::opts_chunk$set(echo = FALSE)

Please note, that we just reuse the metadata column names from Qualtrics. Standardising this across multiple survey providers would be great but requires more knowledge of Qualtrics than I have.

metadata(results)$name <- "MOCK Qualtrics dataset"
metadata(results)$description <- "a MOCK dataset used to show how to import Qualtrics metadata into the codebook R package"
metadata(results)$identifier <- "doi:10.5281/zenodo.1326520"
metadata(results)$datePublished <- "2018-08-01"
metadata(results)$creator <- list(
      "@type" = "Person",
      givenName = "Ruben", familyName = "Arslan",
      email = "ruben.arslan@gmail.com", 
      affiliation = list("@type" = "Organization",
        name = "MPI Human Development, Berlin"))
metadata(results)$url <- "https://rubenarslan.github.io/codebook/articles/codebook_qualtrics.html"
metadata(results)$temporalCoverage <- "2018" 
metadata(results)$spatialCoverage <- "Nowhere" 
# We don't want to look at the code in the codebook.
knitr::opts_chunk$set(warning = TRUE, message = TRUE, echo = FALSE)
codebook(results, survey_repetition = "single",
         metadata_table = knit_by_pkgdown, metadata_json = knit_by_pkgdown)

r ifelse(knit_by_pkgdown, '', '### Codebook table')

if (!knit_by_pkgdown) {
  codebook:::escaped_table(codebook_table(results))
}


Try the codebook package in your browser

Any scripts or data that you put into this service are public.

codebook documentation built on July 1, 2020, 10:28 p.m.