This is a function to read Stata labels from data imported by haven.
It returns a data.table if return.data.table=TRUE and a data.frame if
return.data.table=FALSE.
withstatalabels <- function(dt, return.data.table = FALSE) {
if (!require(data.table) | !require(haven))
stop('`withstatalabels` requires `data.table` and `haven` packages')
dt <- data.table(dt)
dtclass <- sapply(dt, class)
dtlabelled <-
names(dt)[sapply(dtclass, function(x)
'haven_labelled' %in% x)]
dt[, (dtlabelled) := lapply(.SD, as_factor),
.SDcols = dtlabelled]
if (!return.data.table)
as.data.frame(dt)
else
dt[]
}