R/nomeia_cnae.R

Defines functions nomeia_cnae

Documented in nomeia_cnae

#' Nomes Classificação Nacional de Atividades Econômicas - Subclasse
#'
#' @encoding UTF-8
#'
#' @description Procura em dataframe por coluna com códigos CNAE subclasse e adiciona uma coluna com os nomes relacionados.
#'
#' @param tabela Dataframe: a tabela para adicionar os nomes das subclasses da CNAE
#' @param campo Caractere: a coluna com os códigos das subclasses da CNAE
#' @param nivel Caractere: o nível CNAE. Deve ser "subclasse", "classe", "grupo", "divisão" ou "seção".
#'
#' @return Adiciona uma coluna com as descrições das subclasses da CNAE em uma tabela que possui apenas os códigos.
#' @export
#'
#' @examples
#' df1 <- data.frame(codigos_cnae_subclasse = c("0111301", "4520008", "9900800"))
#' df2 <- nomeia_cnae(df1, "codigos_cnae_subclasse", "subclasse")
#' df2
#'
#' df3 <- data.frame(codigos_cnae_grupo = c(11, 452, 990))
#' df4 <- nomeia_cnae(df3, "codigos_cnae_grupo", "grupo")
#' df4
nomeia_cnae <- function(tabela, campo, nivel = "subclasse") {

  # Erros
  if (!(nivel %in% list("subclasse", "classe", "grupo", "divis\u00e3o", "se\u00e7\u00e3o"))) {
    stop("Por favor, escolha um n\u00edvel CNAE v\u00e1lido: subclasse, classe, grupo, divis\u00e3o ou se\u00e7\u00e3o", call. = F)
  }

  # casos em que o nivel nao seja secao
  if (nivel != "se\u00e7\u00e3o") {

    # Condicionais do nivel
    if (nivel == "subclasse") {
      tamanho <- 7
      suporte <- suporte_cnae_subclasse
      nome <- "nome_cnae_subclasse"
    } else if (nivel == "classe") {
      tamanho <- 5
      suporte <- suporte_cnae_classe
      nome <- "nome_cnae_classe"
    } else if (nivel == "grupo") {
      tamanho <- 3
      suporte <- suporte_cnae_grupo
      nome <- "nome_cnae_grupo"
    } else if (nivel == "divis\u00e3o") {
      tamanho <- 2
      suporte <- suporte_cnae_divisao
      nome <- "nome_cnae_divisao"
    }
    vetor_tamanho <- paste0("%0", tamanho, "d")

    col_campo <- tabela[[campo]]

    x <- dplyr::mutate(tabela, cod_caracter = sprintf(vetor_tamanho, as.numeric(col_campo))) %>%
      dplyr::left_join(suporte, by = rlang::set_names("cod", "cod_caracter")) %>%
      subset(select = -cod_caracter)

    # caso em que o nivel seja secao
  } else {
    x <- dplyr::left_join(tabela, suporte_cnae_secao, by = rlang::set_names("cod", rlang::quo_name(campo)))
    nome <- "nome_cnae_secao"
  }

  # Realoca a coluna nova para depois do código

  x <- dplyr::relocate(x, nome, .after = campo)

  return(x)
}
BernardoCGdaSilva/engate documentation built on June 15, 2022, 3:15 p.m.