23/07/2020

Classificação condicional no R

Imaginemos a seguinte situação: eu tenho uma lista de alunos e suas respectivas notas, e gostaria de classificá-los se estão aprovados ou reprovados.

Essa classificação, será com base na nota e feita para cada aluno da lista, pensando numa lista pequena é fácil ver quem está abaixo ou acima da média, mas se pensarmos em 50, 100 ou 200 alunos já começa a se tornar complicado. Nessa hora o R ajuda muito a criar uma tabela com essas informações e facilita o trabalho futuro com esses dados. 

Para começar, criaremos a lista:

> alunos <- c("Aline","João","Alonso","Josias", "Camila", "Katia","Pedro", "José", "Ricardo", "Luis", "Luiza", "Gabriela")
> notas <- c(9.2,5.6,7.7,7.0,6.3,6.5,6.0,6.1,8.2,7.0,8.8,5.9)

Vale lembrar que a lista poderia estar em um arquivo csv criado no Excel (ou LibreOffice), ou mesmo em um arquivo txt. Daí bastaria importar o arquivo.

> dados <- data.frame(alunos,notas) #criar a tabela

Para começar, é preciso quantos alunos está na lista, para isso:

> length(alunos)

Nesse caso foi 12, então agora é classificar quem tem nota abaixo de 6.0 como reprovado e maior que 6.0 como aprovado. Para isso será criado um vetor status, que depois será incluído no data frame.

> status <- 0
> for (i in 1:12) {
  if(notas[i] < 7.0){status[i] = "Reprovado"}
  else{status[i] = "Aprovado"}
}

O vetor status agora contém a classificação de cada aluno, então basta inserir-lo na tabela

> tabela <- cbind(dados,status)
> tabela #exibe o resultado

Agora vamos pensar em outra classificação. Supondo que a média seja 7, e que os alunos com nota acima de 6 tem a possibilidade de fazer um exame para serem reavaliados. Podemos classificá-los em aprovados, de exame e reprovados.

Os dados serão os mesmo, o que mudará será as condições do comando for:

> status <- 0
> for (i in 1:12) {
  if(notas[i] < 6.0){status[i] = "Reprovado"}
  else if(notas[i] < 7.0){status[i] = "Exame"}
  else{status[i] = "Aprovado"}
}

> tabela <- cbind(dados,status)
> tabela #exibe o resultado

Vídeo tutorial: