web-dev-qa-db-fra.com

Avertissement lors de la définition du facteur: les niveaux dupliqués dans les facteurs sont obsolètes

J'ai un petit problème avec ma carte radar en R. Même si l'intrigue est correcte, je reçois l'avertissement suivant:

> source('~/.active-rstudio-document')
Warning message:
In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels,  :
  duplicated levels in factors are deprecated
> radar
Warning messages:
1: In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels,  :
  duplicated levels in factors are deprecated
2: In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels,  :
  duplicated levels in factors are deprecated

J'ai vu la même erreur dans d'autres articles, mais je n'ai pas vraiment compris comment appliquer les réponses à mon jeu de données ...

Ceci est mon jeu de données

MSF,C1,2
OCA,C1,6
SIOA,C1,4
CCFF,C1,4
MSF,C2,4
OCA,C2,2
SIOA,C2,6
CCFF,C2,2
MSF,C3,6
OCA,C3,6
SIOA,C3,6
CCFF,C3,6

Et voici le code du graphique radar correspondant (probablement seule la première partie où je définis mon jeu de données est pertinente mais oui ... c'est là que je suis perdu):

colnames(dataset) = c("type", "variable", "value")
dataset$value = as.numeric(dataset$value)

dataset$variable <- factor(dataset$variable, levels = rev(dataset$variable), ordered=TRUE)

# Radar function ------------------------------------------------------------
coord_radar <- function (theta = "x", start = 0, direction = 1) {
  theta <- match.arg(theta, c("x", "y"))
  r <- if (theta == "x")
    "y"
  else "x"
  ggproto("CordRadar", CoordPolar, theta = theta, r = r, start = start,
          direction = sign(direction),
          is_linear = function(coord) TRUE)
}


# Radar plot ------------------------------------------------------------
radar <- ggplot(dataset, aes(x = variable, y = value, group=type)) +
  geom_polygon(aes(group = type, color=type,fill=type), size = 1, alpha=0.1) + 
  scale_fill_manual(values=cbPalette) +
  geom_line(aes(group = type, color=type)) + 
  scale_colour_manual(values = cbPalette) + 
  coord_radar() 
16
Jonas

Oui, presque tout cela n'a aucun rapport avec votre problème.

Vous essayez de créer un facteur avec les niveaux suivants: rev(dataset$variable). Cela donne:

[1] C3 C3 C3 C3 C2 C2 C2 C2 C1 C1 C1

Voyez comment vous avez répliqué les niveaux? Vous ne voudrez avoir chaque niveau qu'une seule fois, dans l'ordre que vous souhaitez. La valeur par défaut est sort(unique(dataset$variable)), ce qui donne C1 C2 C3, Ou vous pouvez utiliser rev(unique(dataset$variable) pour donner C3 C2 C1.

Le package forcats possède plusieurs fonctions pratiques pour créer ou modifier facilement des facteurs et l'ordre de leurs niveaux.

26
Axeman