Wydaje się, że istnieje różnica między poziomami i etykietami czynnika w R. Do tej pory zawsze myślałem, że poziomy są `` prawdziwą '' nazwą poziomów czynników, a etykiety są nazwami używanymi do wyników (takich jak tabele i wykresy) . Oczywiście tak nie jest, jak pokazuje poniższy przykład:
df <- data.frame(v=c(1,2,3),f=c('a','b','c'))
str(df)
'data.frame': 3 obs. of 2 variables:
$ v: num 1 2 3
$ f: Factor w/ 3 levels "a","b","c": 1 2 3
df$f <- factor(df$f, levels=c('a','b','c'),
labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))
levels(df$f)
[1] "Treatment A: XYZ" "Treatment B: YZX" "Treatment C: ZYX"
Myślałem, że poziomy („a”, „b”, „c”) mogą być nadal dostępne podczas tworzenia skryptów, ale to nie działa:
> df$f=='a'
[1] FALSE FALSE FALSE
Ale to robi:
> df$f=='Treatment A: XYZ'
[1] TRUE FALSE FALSE
Moje pytanie składa się więc z dwóch części:
Jaka jest różnica między poziomami a etykietami?
Czy można mieć różne nazwy poziomów współczynników dla skryptów i danych wyjściowych?
Tło: W przypadku dłuższych skryptów pisanie skryptów z krótkimi poziomami współczynników wydaje się znacznie łatwiejsze. Jednak w przypadku raportów i wykresów te krótkie poziomy współczynników mogą nie być wystarczające i powinny zostać zastąpione precyzyjnymi nazwami.
levels
argument, podajesz wartości wejściowe, które mają zostać dopasowane dolabels
argumentu. R zachowuje etykiety (jako atrybutlevels
i istnieje zamieszanie) i wewnętrznie przechowuje kody całkowite. Te kody liczb całkowitych nie mają nic wspólnego z oryginalnymi wartościami, niezależnie od ich typu. Myślę, że mnie źle zrozumiałeś.Napisałem pakiet „lfactors”, który umożliwia odniesienie się do poziomów lub etykiet.
Należy zauważyć, że współczynnik l wymaga, aby poziomy były numeryczne, aby nie można ich było pomylić z etykietami.
źródło