universidades.sp <- function (categoria.univ, cursos.pret, periodo, aval.mec, mensalidade){ library(readxl) Cursos_SP <- read_excel("cursos_sp.xlsx") #1 Lendo o banco de dados "cursos_sp.xlsx". Cursos_SP <- Cursos_SP[,1:4] #2 Para garantir que só sejam utilizadas as 4 primeiras colunas. Notas_MEC <- read_excel("notas_mec.xlsx") #3 Lendo o banco de dados "notas_mec.xlsx". Notas_MEC <- Notas_MEC[,1:3] #4 Para garantir que só sejam utilizadas as 3 primeiras colunas. Notas_MEC$Nota_MEC <- as.numeric(Notas_MEC$Nota_MEC) #5 Para garantir que a coluna Nota_MEC seja interpretada como números. #VERIFICANDO OS PARAMETROS DA FUNCAO# if(categoria.univ != "Pública" && categoria.univ != "Particular") #6 Verifica se "categoria.univ" foi inserido corretamente. { stop("A categoria da universidade deve ser pública ou particular") #7 Se não foi, interrompe a funcao e exibe uma mensagem para o usuario. } if(periodo != "Matutino" && periodo != "Vespertino" && periodo != "Integral" && periodo != "Noturno") #8 Verifica se "periodo" foi inserido corretamente. { stop("O período deve ser igual a matutino, vespertino, integral ou noturno") #9 Se não foi, interrompe a funcao e exibe uma mensagem para o usuario. } if(aval.mec != round(aval.mec) || aval.mec <= 0 || aval.mec > 5) #10 Verifica se " aval.mec " e um numero inteiro maior do que zero e menor ou igual a cinco. { stop ("aval.mec deve conter apenas um número inteiro maior do que 0 e menor ou igual a 5 ") #11 Senao, interrompe a funcao e exibe mensagem para o usuario. } if(categoria.univ != "Pública" && (is.na(mensalidade) || mensalidade <=0)) #12 Verifica se o preenchimento de "mensalidade" foi feito corretamente para a categoria 'Particular'. { stop ("Para universidades particulares, é necessário o preenchimento da mensalidade aproximadamente desejada ") #13 Senao, interrompe a funcao e exibe mensagem para o usuario. } if(categoria.univ != "Pública" && (mensalidade != round(mensalidade) || mensalidade <= 0)) #14 Verifica se 'mensalidade' e um numero inteiro e maior que zero. { stop ("Mensalidade deve ser um número inteiro e >0 ") #15 Senao, interrompe a funcao e exibe mensagem para o usuario. } #FUNCAO BUSCA DE UNIVERSIDADES# df.uniao.bases <- merge(Cursos_SP,Notas_MEC, by = c("Nome_Universidade")) #16 Junta as bases de dados usando a coluna 'Nome_Universidade' #17 Buscar todas as linhas da base que atendam aos criterios acima, separando a questão da mensalidade if(categoria.univ=="Pública") { linhas.selecionadas <- which(df.uniao.bases$Categoria==categoria.univ & df.uniao.bases$Nota_MEC==aval.mec & df.uniao.bases$Curso_Pretendido==cursos.pret & df.uniao.bases$Periodo==periodo) }else{ linhas.selecionadas <- which(df.uniao.bases$Categoria==categoria.univ & df.uniao.bases$Nota_MEC==aval.mec & df.uniao.bases$Curso_Pretendido==cursos.pret & df.uniao.bases$Periodo==periodo & (abs(df.uniao.bases$Valor_Mensalidade-mensalidade)<=1000)) #18 Retorna todas as universidades que tenham valor proximo da mensalidade desejada. } if(length(linhas.selecionadas)==0) #19 Verifica se a busca retornou vazio. { stop ("Não foi encontrada nenhuma universidade com os requisitos escolhidos ") #20 Senao, interrompe a funcao e exibe mensagem para o usuario. }else{ universidade <- df.uniao.bases[linhas.selecionadas,] #21 Filtra o dataframe somente com a linhas que seguem os criterios. } if(categoria.univ=="Particular"){ #22 Caso a categoria seja particular, é possível criar um ranking da mais barata para mais cara universidade <- universidade[order(universidade$Valor_Mensalidade),] #23 Ordena de acordo com menor mensalidade. ranking <- seq(1,nrow(universidade)) #24 Cria sequencia de numeros para serem usados como ranking baseado na mensalidade. universidade$ranking <- ranking #25 Adiciona ranking no dataframe } return(universidade) }