Ich habe Probleme mit Variablenbeschriftungen von data.frame-Spalten. Sagen, dass ich einen Datenrahmen, wie dieser (Teil von viel größeren Datenrahmen) haben:R: Zuweisen von Variablenbeschriftungen von Datenrahmenspalten
data <- data.frame(age = c(21, 30, 25, 41, 29, 33), sex = factor(c(1, 2, 1, 2, 1, 2), labels = c("Female", "Male")))
ich auch einen benannten Vektor mit den Variablenlabels für diese Daten haben:
var.labels <- c(age = "Age in Years", sex = "Sex of the participant")
Was ich tun möchte, ist die Zuordnung der Variablenbezeichnungen in var.labels
zu den Spalten im Datenrahmen data
über die Funktion label
aus dem Paket Hmisc
. Ich kann durch eine wie diese ihnen eine tun und das Ergebnis überprüfen danach:
> label(data[["age"]]) <- "Age in years"
> label(data[["sex"]]) <- "Sex of the participant"
> label(data)
age sex
"Age in years" "Sex of the participant"
Die Variablenlabels als Attribute der Spalten zugeordnet sind:
> attr(data[["age"]], "label")
[1] "Age in years"
> attr(data[["sex"]], "label")
[1] "Sex of the participant"
Wunderbar. Bei einem größeren Datenrahmen von beispielsweise 100 oder mehr Spalten ist dies jedoch nicht sehr praktisch oder effizient. Eine andere Sache, die ich leicht tun könnte, ist, sie als Attribute direkt zuzuweisen:
> attr(data, "variable.labels") <- var.labels
Hilft nicht. Die Variablenlabels sind nicht auf die Spalten zugeordnet:
> label(data)
age sex
"" ""
Stattdessen werden sie als Attribut des Datenrahmens zugeordnet selbst (die letzte Komponente der Liste sehen):
> 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"
Und das ist nicht was ich will. Ich brauche die Variablenlabels als Attribute der Spalten. Ich habe versucht, die folgende Funktion (und viele andere) zu schreiben:
set.var.labels <- function(dataframe, label.vector){
column.names <- names(dataframe)
dataframe <- mapply(label, column.names, label.vector)
return(dataframe)
}
Und als es ausführen:
> set.var.labels(data, var.labels)
nicht helfen. Er gibt die Werte des Vektors var.labels
zurück, weist jedoch keine Variablenbezeichnungen zu. Wenn ich versuche, es einem neuen Objekt zuzuweisen, enthält es nur die Werte der Variablenlabels als Vektor.
@ eipi10: Vielen Dank! Es klappt! Das ist genau das, was ich brauchte. Ich habe Probleme, die Indexierung zu verstehen, wenn ich mit der Anwendungsfamilie "apply" arbeite. Gibt es einen Leitfaden, den ich lesen kann, oder ist es eine Frage der Erfahrung? – panman
Für kurze Tutorials zu 'lapply', [this] (http://rollingyours.wordpress.com/category/r-programming-apply-lapply-apply/) und [this] (https://nsaunders.wordpress.com/2010/08/20/a-brief-einführung-zu-bewerben-in-r /) könnte hilfreich sein. Ich habe meiner Antwort noch weitere Erklärungen hinzugefügt. – eipi10