Mam problemy ze zmiennymi etykietami kolumn data.frame. Że mam ramkę danych, jak to (część znacznie większej ramki danych):R: Przypisywanie etykiet zmiennych kolumn kolumn danych
data <- data.frame(age = c(21, 30, 25, 41, 29, 33), sex = factor(c(1, 2, 1, 2, 1, 2), labels = c("Female", "Male")))
Mam też nazwie wektor ze zmienną etykiet dla tych danych:
var.labels <- c(age = "Age in Years", sex = "Sex of the participant")
Co chcę zrobić jest przypisanie zmiennych etykiet w var.labels
do kolumn w ramce danych data
przy użyciu funkcji label
z pakietu Hmisc
. Mogę zrobić je jeden po drugim tak i sprawdzić wynik potem:
> label(data[["age"]]) <- "Age in years"
> label(data[["sex"]]) <- "Sex of the participant"
> label(data)
age sex
"Age in years" "Sex of the participant"
Zmienna etykiety są przypisane jako atrybuty kolumn:
> attr(data[["age"]], "label")
[1] "Age in years"
> attr(data[["sex"]], "label")
[1] "Sex of the participant"
wspaniałe. Jednak przy większej ramce danych, powiedzmy 100 lub więcej kolumn, nie będzie to bardzo wygodne i wydajne. Inną rzeczą, którą mogę łatwo zrobić, to przypisać je bezpośrednio jako atrybuty:
> attr(data, "variable.labels") <- var.labels
Nie pomaga. Zmienna etykiety nie są przypisane do kolumn:
> label(data)
age sex
"" ""
Zamiast tego, są one przypisane jako atrybut samej ramki danych (patrz ostatni element listy):
> 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"
I to jest nie tego chcę. Potrzebuję etykiet zmiennych jako atrybutów kolumn. Starałem się napisać następujące funkcje (i wiele innych):
set.var.labels <- function(dataframe, label.vector){
column.names <- names(dataframe)
dataframe <- mapply(label, column.names, label.vector)
return(dataframe)
}
I niż wykonać go:
> set.var.labels(data, var.labels)
nie pomogło. Zwraca wartości wektora var.labels
, ale nie przypisuje etykiet zmiennych. Jeśli spróbuję przypisać go do nowego obiektu, po prostu zawiera wartości zmiennych etykiet jako wektor.
@ eipi10: Dziękuję bardzo! To działa! To jest DOKŁADNIE to, czego potrzebowałem. Mam problemy ze zrozumieniem indeksowania podczas pracy z rodziną funkcji 'apply'. Czy istnieje przewodnik, który mogę przeczytać, czy jest to kwestia doświadczenia? – panman
Dla krótkich samouczków na temat 'lapply', [this] (http://rollingyours.wordpress.com/category/r-programming-apply-lapply-tapply/) i [this] (https://nsaunders.wordpress.com/2010/08/20/a-brief-introduction-to-apply-in-r /) może być pomocny. Dodałem również nieco wyjaśnienia do mojej odpowiedzi. – eipi10