Factor relevel/reorder vs inorder

Olá.
Na opinião de vocês quando na prática faz sentido querer um fator inorder (como os símbolos < nos levels) versus ter ele somente ordenado ou “re-nivelado”? Eu imagino ambos os casos tendo um mesmo comportamento ao plotar no ggplot, certo?

meses = forcats::as_factor(c('Apr','Jan', 'May', 'Fev', 'Mar'))
meses_relevel = forcats::fct_relevel(meses, c('Jan', 'Fev', 'Mar', 'Apr', 'May'), )
meses_inorder = forcats::fct_inorder(c('Jan', 'Fev', 'Mar', 'Apr', 'May'), ordered = T) 

meses
#> [1] Apr Jan May Fev Mar
#> Levels: Apr Jan May Fev Mar
meses_relevel
#> [1] Apr Jan May Fev Mar
#> Levels: Jan Fev Mar Apr May
meses_inorder
#> [1] Jan Fev Mar Apr May
#> Levels: Jan < Fev < Mar < Apr < May

Created on 2021-04-20 by the reprex package (v1.0.0)

Leandro, ótima pergunta. Eu não entrei nesse tipo de detalhe durante o curso, mas a diferença entre fatores “desordenados” e ordenados é muito sutil. Para o {ggplot2}, por exemplo, os dois costumam ser equivalentes.

A diferença vem quando estamos trabalhando com modelagem, na qual a função pode querer o maior/menor fator. Veja abaixo um exemplo de quando a ordenação é necessária:

vetor <- c("Jan", "Fev", "Mar", "Apr", "May")
meses <- forcats::as_factor(vetor)
meses_inorder <- forcats::fct_inorder(vetor, ordered = TRUE)

max(meses)
#> Error in Summary.factor(structure(1:5, .Label = c("Jan", "Fev", "Mar", : 
#>   'max' not meaningful for factors

max(meses_inorder)
#> [1] May
#> Levels: Jan < Fev < Mar < Apr < May

Created on 2021-04-21 by the reprex package (v2.0.0)

P.S.: Não pude deixar de notar algumas coisas no seu código e, como polícia das boas práticas, vou precisar comentar :stuck_out_tongue:

  1. Prefira usar aspas duplas para strings, não aspas simples, e sempre coloque um espaço depois das vírgulas;

  2. Evite escrever T e F ao invés de TRUE e FALSE (as letras não são palavras reservadas);

  3. Para atribuições, use <- e não =;

  4. Nunca deixe uma vírgula solta no final de uma chamada (como é o caso na sua segunda linha), pois isso pode ter efeitos inesperados.

Obrigado Caio. Valeu mais pelas boas praticas, eu sou meio maníaco do =, o resto foi desleixo mesmo.
kkkkk

1 curtida