Organizar estatísticas de classe

Na tabela, é possível extrair a nota de cada pessoa em cada exame. Pense rapidamente em quais variáveis gostaríamos de gerar com essa frase!

statclass
##     name stat1 stat2  r spss
## 1   momo    12     5  6    9
## 2    kim    14    10 13   15
## 3 sascha     7     4  4    1
  • nomes: momo, sascha, kim
  • curso: estatI, estatII, r, spss
  • nota: Valor dependente dos dois anteriores.

Portanto, há duas informações nas colunas estat1, estat2, r e spss. Ou seja, qual teste é (implicitamente através do nome da variável) e a nota. Aqui, os valores são dados como nomes de variáveis, o que viola as regras de um conjunto de dados tidy. No entanto, em um formato tidy, precisamos ter ambas as informações explicitamente! Pois os nomes das colunas aqui são valores (tipo de exame) e não apenas nomes.

Para corrigir isso, usamos pivot_longer(). Primeiro, especificamos quais colunas devem ser reorganizadas (no nosso caso, estat1 até spss), em seguida, em quais novas variáveis os nomes ou os valores devem ser armazenados. Com names_to, nomeamos a nova variável que distingue o teste e com values_to, nomeamos a variável que contém as notas.

statclassTidy <- statclass %>% 
  pivot_longer(
    stat1:spss, 
    names_to = "course", 
    values_to = "grade"
  ) %>% 
  arrange(
    name,
    course
  )

statclassTidy
## # A tibble: 12 × 3
##    name   course grade
##    <chr>  <chr>  <dbl>
##  1 kim    r         13
##  2 kim    spss      15
##  3 kim    stat1     14
##  4 kim    stat2     10
##  5 momo   r          6
##  6 momo   spss       9
##  7 momo   stat1     12
##  8 momo   stat2      5
##  9 sascha r          4
## 10 sascha spss       1
## 11 sascha stat1      7
## 12 sascha stat2      4

Agora temos um formato long que muitas vezes facilita o processamento de dados (por exemplo, com ggplot2). Mas cuidado: Agora não é mais possível calcular a média da grade diretamente, pois isso inclui diferentes cursos. Portanto, é necessário definir condições (quando estiver no formato long).

Para reverter isso, você pode usar a função pivot_wider():

statclassRe <- statclassTidy %>% 
  pivot_wider(
    names_from = course, 
    values_from = grade, 
  )

statclassRe