I am struggling with variable labels of data.frame columns. Say I have the following data frame (part of much larger data frame):
data <- data.frame(age = c(21, 30, 25, 41, 29, 33), sex = factor(c(1, 2, 1, 2, 1, 2), labels = c("Female", "Male")))
#
I also have a named vector with the variable labels for this data frame:
var.labels <- c(age = "Age in Years", sex = "Sex of the participant")
I want to assign the variable labels in var.labels
to the columns in the data frame data
using the function label
from the Hmisc
package. I can do them one by one like this and check the result afterwards:
> label(data[["age"]]) <- "Age in years"
> label(data[["sex"]]) <- "Sex of the participant"
> label(data)
age sex
"Age in years" "Sex of the participant"
The variable labels are assigned as attributes of the columns:
> attr(data[["age"]], "label")
[1] "Age in years"
> attr(data[["sex"]], "label")
[1] "Sex of the participant"
Wonderful. However, with a larger data frame, say 100 or more columns, this will not be convenient or efficient. Another option is to assign them as attributes directly:
> attr(data, "variable.labels") <- var.labels
Does not help. The variable labels are not assigned to the columns:
> label(data)
age sex
"" ""
Instead, they are assigned as an attribute of the data frame itself (see the last component of the list):
> attributes(data)
$names
[1] "age" "sex"
$row.names
[1] 1 2 3 4 5 6
$class
[1] "data.frame"
$variable.labels
age sex
"Age in Years" "Sex of the participant"
And this is not what I want. I need the variable labels as attributes of the columns. I tried to write the following function (and many others):
set.var.labels <- function(dataframe, label.vector){
column.names <- names(dataframe)
dataframe <- mapply(label, column.names, label.vector)
return(dataframe)
}
And then execute it:
> set.var.labels(data, var.labels)
Did not help. It returns the values of the vector var.labels
but does not assign the variable labels. If I try to assign it to a new object, it just contains the values of the variable labels as a vector.
See Question&Answers more detail:
os