Il semble y avoir une différence entre les niveaux et les étiquettes d'un facteur dans R. Jusqu'à présent, j'ai toujours pensé que les niveaux étaient le `` vrai '' nom des niveaux de facteur, et les étiquettes étaient les noms utilisés pour la sortie (comme les tableaux et les graphiques) . Ce n'est évidemment pas le cas, comme le montre l'exemple suivant:
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"
Je pensais que les niveaux ('a', 'b', 'c') pouvaient toujours être accessibles lors de la création de scripts, mais cela ne fonctionne pas:
> df$f=='a'
[1] FALSE FALSE FALSE
Mais cela fait:
> df$f=='Treatment A: XYZ'
[1] TRUE FALSE FALSE
Donc, ma question se compose de deux parties:
Quelle est la différence entre les niveaux et les étiquettes?
Est-il possible d'avoir des noms différents pour les niveaux de facteur pour le script et la sortie?
Contexte: pour les scripts plus longs, les scripts avec des niveaux de facteurs courts semblent être beaucoup plus faciles. Cependant, pour les rapports et les graphiques, ces niveaux de facteurs courts peuvent ne pas être adéquats et doivent être remplacés par des noms plus précis.
levels
argument, vous donnez les valeurs dans l'entrée qui doivent être mises en correspondance avec l'labels
argument. R conserve les étiquettes (comme attributlevels
, et il y a confusion) et stocke les codes entiers en interne. Ces codes entiers n'ont rien à voir avec les valeurs d'origine, quel que soit leur type. Je pense que vous m'avez mal compris.J'ai écrit un package "lfactors" qui vous permet de faire référence à des niveaux ou à des étiquettes.
Notez qu'un facteur exige que les niveaux soient numériques afin qu'ils ne puissent pas être confondus avec les étiquettes.
la source