R/menciones_comp.R

Defines functions menciones_comp

Documented in menciones_comp

#' Tabla de menciones con comparativo al Q anterior
#'
#' Esta función recibe los datos del actual Q y el Q anterior y con ello calcula
#' el la frecuencia de menciones y porcentajes de éstas. Luego realiza un left_join
#' con fuzzymatching (utilizando distancia de texto coseno, modificable) por la izquierda,
#' y con ello saca las diferencias porcentuales del Q anterior a este.
#' Esta función es una versión más elaborada de makeMenciones y la manda a llamar
#' para su funcionamiento.
#'
#' @param df Base de datos actual
#' @param df_old Base de datos del Q pasado
#' @param menciones_col Vector con los nombres de las columnas donde están las menciones de `df`
#' @param menciones_col_old Vector con los nombres de las columnas donde están las menciones de `df_old`
#' @param q Número de levantamiento (i.e. 3Q)
#' @param tipo Tipo de menciones que se quieren ("Positivas", "Negativas" o "Todas")
#' @param cruce Columna con la cual se van a cruzar las menciones
#' @param filtro Tipos de clientes: "Promotor", "Pasivo", "Detractor" o "Pasivo + Detractor"
#' @param filtro_col Columna en `df` en la cual está el filtro buscado
#' @param filtro_col_old Columna en `df_old` en la cual está el filtro buscado
#'
#' @return Tabla con columnas: mención, casos, porcentaje actual, porcentaje pasado, diferencia y código html para imprimir
#' @export
#'
#' @examples
menciones_comp <- function(df,
                           df_old,
                           menciones_col,
                           menciones_col_old,
                           q,
                           tipo = "Todas",
                           cruce = "Ninguno",
                           filtro = "Ninguno",
                           filtro_col = "",
                           filtro_col_old = filtro_col) {
  if((filtro == "Promotor" & tipo == "Negativas") | (filtro == "Detractor" & tipo == "Positivas")){
    return(data.frame())
  }
  q_prev <- previous_q(q)
  nombres <- c(
    "Mención",
    paste0("Casos (", q, "Q)"),
    paste0("Porcentaje (", q, "Q) %"),
    paste0("Porcentaje (", q_prev, "Q) %"),
    "Diferencia (pp)")

  arrow <- function(x){
    if(is.na(x) || x ==""){return("")}
    else if(x > 0){
      return("<i class=\"glyphicon glyphicon-chevron-up\" style=\"color:#298428\"></i>")
    } else if(x < 0){
      return("<i class=\"glyphicon glyphicon-chevron-down\" style=\"color:#cc3232\"></i>")
    } else if(x == 0){
      return("<i class=\"glyphicon glyphicon-minus\" style=\"color:#000000\"></i>")
    }
  }

  if (cruce != "Ninguno"){
    res <- makeMenciones(df,
                         menciones_col,
                         tipo,
                         cruce,
                         filtro,
                         filtro_col)
    return(res)

  } else {
    t1 <- makeMenciones(df,
                        menciones_col,
                        tipo,
                        cruce,
                        filtro,
                        filtro_col)
    t2 <- makeMenciones(df_old,
                        menciones_col_old,
                        tipo,
                        cruce,
                        filtro,
                        filtro_col_old)

    ##Test
    t1 = t1 %>% mutate(Mención = as.character(Mención))
    t2 = t2 %>% mutate(Mención = as.character(Mención))
    #
    res <- t1 %>%
      fuzzyjoin::stringdist_left_join(
        t2 %>% select(c(1, 3)),
        by = c(Mención = "Mención"),
        method = "cosine",
        max_dist = 0.005,
        distance_col = "dist") %>%
      dplyr::select(Mención.x, Casos, Porcentaje.x, Porcentaje.y) %>%
      dplyr::mutate(diff = round(Porcentaje.x - Porcentaje.y,1)) %>%
      # dplyr::mutate_at(function(x) ifelse(is.na(x), "", x),
      #                  .vars = c("Porcentaje.y", "diff")) %>%
      dplyr::rowwise(.) %>%
      dplyr::mutate(asdf = arrow(diff))
    colnames(res) <- c(nombres,"Cambio")
    return(res)

  }
}
UPAXResearch/graficator documentation built on Oct. 11, 2019, 8:01 a.m.