R/w_rm_columnas_a_menciones.R

Defines functions w_rm_columnas_a_menciones

Documented in w_rm_columnas_a_menciones

#' función para transformar columnas a menciones
#'
#' Transforma conjuntos de respuesta múltiple que tienen en cada columna una marca a un dataframe en el que todo está por orden de mención, obviamente el orden de mención generado es ficticio
#'
#' @param tabla dataframe
#' @param n_menciones número máximo de menciones permitidas (si tienes 15 marcas se recomienda usar n = 15 para verificar)
#' @param prefijo character que define el nombre que comparten las variables generadas
#'
#' @return Un archivo del mismo tipo con la proyección correcta y las columnas de longitud y latitud en los datos.



# función para transformar matriz de marcas a matriz de menciones y su inversa
w_rm_columnas_a_menciones <- function(tabla,n_menciones,prefijo){

  f_aux_vector_marcas <- function(a){
    resultado <- unlist(str_split(a,'_'))[which(unlist(str_split(a,'_')) != '')]
    return(resultado)
  }

  f_aux_vectores_a_dataframe <- function(vector){
    cuantos <- 30 - length(vector)
    vector <- c(vector,rep(NA,cuantos))
    dataframe <- data.frame(t(unlist(vector)))
    return(dataframe)
  }

  eval(parse(text= paste0(
    "a <- tabla %>%
    mutate_all(as.character) %>%
    replace(is.na(.),'') %>%
    unite(.,p1_01,1:length(.),sep = '_') %>% unlist"
  )))

  resultado <- map(a,f_aux_vector_marcas) %>%
    map(.,f_aux_vectores_a_dataframe) %>%
    do.call('rbind',.) %>%
    select_if(function(x) !(all(is.na(x)) | all(x==""))) %>%
    select_at(1:min(n_menciones,length(.)))

  names(resultado) <- paste0(prefijo,'_',1:length(resultado))

  return(resultado)

}
pelishk/upax_library documentation built on Nov. 28, 2022, 10:45 a.m.