125 votes

Confusion entre les niveaux de facteurs et les étiquettes de facteurs

Il semble y avoir une différence entre les niveaux et les étiquettes d'un facteur R. Jusqu'à maintenant, j'ai toujours pensé que les niveaux étaient les "vrais" noms de niveaux de facteurs, et les étiquettes ont été les noms utilisés pour la sortie (tels que des tableaux et des graphiques). Évidemment, ce n'est 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') pourrait en quelque sorte toujours être consulté lors de la création, mais cela ne fonctionne pas:

> df$f=='a'
[1] FALSE FALSE FALSE

Mais ce n':

> 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 niveaux des facteurs pour l'écriture de scripts et de sortie?

Contexte: Pour plus de scripts, script, avec de courts niveaux de facteur semble être beaucoup plus facile. Toutefois, pour les rapports et les parcelles, ce court niveaux de facteur peut ne pas suffire et doit être remplacé par de preciser les noms.

147voto

Joris Meys Points 38980

Très court : les niveaux sont de l'entrée, les étiquettes sont de sortie dans l' factor() fonction. Un facteur n'a qu'un level d'attribut, qui est défini par l' labels argument dans l' factor() fonction. Ceci est différent de la notion d'étiquettes dans les logiciels statistiques tels que SPSS, et peut être déroutant au début.

Ce que vous faites dans cette ligne de code

df$f <- factor(df$f, levels=c('a','b','c'),
  labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))

est de dire à R qu'il y est un vecteur df$f

  • laquelle vous voulez transformer en un facteur de
  • dans laquelle les différents niveaux sont codées comme a, b, et c
  • et pour lequel vous souhaitez les niveaux pour être étiqueté comme le Traitement, etc.

La fonction de facteur va chercher les valeurs de a, b et c, les convertir en numérique facteur de classes, et d'ajouter les valeurs des étiquettes à l' level attribut du facteur. Cet attribut est utilisé pour convertir l'intérieur des valeurs numériques pour les étiquettes correctes. Mais comme vous le voyez, il n'y a pas d' label d'attribut.

> df <- data.frame(v=c(1,2,3),f=c('a','b','c'))    
> attributes(df$f)
$levels
[1] "a" "b" "c"

$class
[1] "factor"

> df$f <- factor(df$f, levels=c('a','b','c'),
+   labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))    
> attributes(df$f)
$levels
[1] "Treatment A: XYZ" "Treatment B: YZX" "Treatment C: ZYX"

$class
[1] "factor"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X