knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
This vignette shows a small example how functions to work with labelled data can be implemented in a typical data visualization workflow.
In software like SPSS, it is common to have value and variable labels as variable attributes. Variable values, even if categorical, are mostly numeric. In R, however, you may use labels as values directly:
factor(c("low", "high", "mid", "high", "low"))
Reading SPSS-data with haven or sjlabelled keeps the numeric values for variables and adds the value and variable labels as attributes. See following example from the sample-dataset efc, which is part of the sjlabelled-package:
library(sjlabelled) data(efc) str(efc$e42dep)
While all plotting and table functions of the sjPlot-package make use of these attributes, many packages and/or functions do not consider these attributes, e.g. R base graphics:
library(sjlabelled) data(efc) barplot( table(efc$e42dep, efc$e16sex), beside = TRUE, legend.text = TRUE )
As you can see in the above figure, the plot has neither axis nor legend labels.
as_label() is a sjlabelled-function that converts a numeric variable into a factor and sets attribute-value-labels as factor levels. When using factors with valued levels, the bar plot will be labelled.
barplot( table(sjlabelled::as_label(efc$e42dep), sjlabelled::as_label(efc$e16sex)), beside = TRUE, legend.text = TRUE )
There are four functions that let you easily set or get value and variable labels of either a single vector or a complete data frame:
get_label()to get variable labels
get_labels()to get value labels
set_label()to set variable labels (add them as vector attribute)
set_labels()to set value labels (add them as vector attribute)
With this function, you can easily add titles to plots dynamically, i.e. depending on the variable that is plotted.
barplot( table(sjlabelled::as_label(efc$e42dep), sjlabelled::as_label(efc$e16sex)), beside = TRUE, legend.text = TRUE, main = get_label(efc$e42dep) )
subset() function drops label attributes (or vector attributes in general) when subsetting data. In the sjlabelled-package, there are handy functions to deal with this problem:
copy_labels() adds back labels to a subsetted data frame based on the original data frame. And
remove_labels() removes all label attributes.
efc.sub <- subset(efc, subset = e16sex == 1, select = c(4:8)) str(efc.sub)
efc.sub <- copy_labels(efc.sub, efc) str(efc.sub)
When working with labelled data, especially when working with data sets imported from other software packages, it comes very handy to make use of the label attributes. The sjlabelled-package supports this feature and offers useful functions for these tasks.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.