1. Construímos una funcion que extrae los xlsx y los convierte a rds:

mifuncion <- function(n){
  
  if(n <= 9){
    data_excel <- paste("DATA-ELECCIONES-master/Datos elecciones chile tribunalcalificador CL/Diputados/2001/DIPUTADOS-0", n ,"-2001.xls",sep="")
    
    diputados <- read_xls(data_excel , sheet = 2)
    diputadosrds <- paste("diputados_0", n, "_2001.rds", sep="")
    saveRDS(diputados, diputadosrds)
    
    diputados_nombres <- read_xls(data_excel , sheet = 1)
    diputadosrds <- paste("diputados_nombres_0", n, "_2001.rds", sep="")
    saveRDS(diputados_nombres, diputadosrds)
    
    # print(diputados)
  }
  else{
    data_excel <- paste("DATA-ELECCIONES-master/Datos elecciones chile tribunalcalificador CL/Diputados/2001/DIPUTADOS-", n ,"-2001.xls",sep="")
    
    diputados <- read_xls(data_excel , sheet = 2)
    diputadosrds <- paste("diputados_", n, "_2001.rds", sep="")
    saveRDS(diputados, diputadosrds)
    
    diputados_nombres <- read_xls(data_excel , sheet = 1)
    diputadosrds <- paste("diputados_nombres_", n, "_2001.rds", sep="")
    saveRDS(diputados_nombres, diputadosrds)
    
    # print(diputados)
  }
}
for (n in 1:11){
  mifuncion(n)
}

2. Construímos una funci+on que extrae las columnas relevantes de identificacion de un registro y las repite el rango que comprende el segmento que agrupa los resultados por lista:

funcion2 <- function(n){
  
  if(n <= 9){
    
    data_rds <- paste("diputados_0", n,    "_2001.rds", sep="")
    diputados2001_01 <- readRDS(data_rds)
    diputados_f <- diputados2001_01[,c("NRO_CIR","NRO_DIS","TIPO_MESA" ,"NOM_CIR", "NRO_MESA" )]

    numero_col <- ncol(diputados2001_01)
    numero  <- match("NRO_MESA", names(diputados2001_01))
    numero_magico  <-  (numero)
    
    cantidad_de_repeticiones  <- (numero_col - numero_magico)
    
    diputados_filas_repetidas <- diputados_f[rep(seq_len(nrow(diputados_f )), each = cantidad_de_repeticiones), ]
    
    diputadosrds <- paste("diputados_repetidos_0", n, "_2001.rds", sep="")
    saveRDS(diputados_filas_repetidas, diputadosrds)
    
    # print(cantidad_de_repeticiones)
    
    # print(diputados_filas_repetidas)
  }
  
  else{
    data_rds <- paste("diputados_", n,    "_2001.rds", sep="")
    diputados2001_01 <- readRDS(data_rds)
    diputados_f <- diputados2001_01[,c("NRO_CIR","NRO_DIS","TIPO_MESA" ,"NOM_CIR", "NRO_MESA" )]

    numero_col <- ncol(diputados2001_01)
    numero  <- match("NRO_MESA", names(diputados2001_01))
    numero_magico  <-  (numero)
    
    cantidad_de_repeticiones  <- (numero_col - numero_magico)
    
    diputados_filas_repetidas <- diputados_f[rep(seq_len(nrow(diputados_f )), each = cantidad_de_repeticiones), ]
    
    diputadosrds <- paste("diputados_repetidos_", n, "_2001.rds", sep="")
    saveRDS(diputados_filas_repetidas, diputadosrds)
    
    # print(cantidad_de_repeticiones)
    
    # print(diputados_filas_repetidas)
  }
}
for (n in 1:11){
  funcion2(n)
}

3. Construímos una funcion que extrae las columnas relevantes de cantidad de votos y listas, las trasponemos y las apilamos:

funcion3 <- function(n){
  
if(n <= 9){
  
    data_rds <- paste("diputados_0", n,    "_2001.rds", sep="")
    diputados2001_01 <- readRDS(data_rds)
    numero_col <- ncol(diputados2001_01)
    numero_magico  <- match("NRO_MESA",names(diputados2001_01))
    numero_magico  <-  ( numero_magico  + 1)

    # selecionamos los resultados electorales por lista:
    diputados2001_01_votos  <- diputados2001_01[c(numero_magico:numero_col)]
    resultados_traspuestos <- as.data.frame(t(diputados2001_01_votos))
    diputados2001_v <- stack(resultados_traspuestos)
    
    # Construímos la columnas de las listas

    numero_col <- ncol(diputados2001_01)
    numero_magico  <- match("NRO_MESA",names(diputados2001_01))
    numero_magico <- numero_magico + 1 
    numero_magico_del_terror <- numero_col - numero_magico + 1

    # extraemos los nombres de las listas:
     
    diputados2001_01_votos_2  <- diputados2001_01[c(numero_magico:numero_col)]

    fr <- names(diputados2001_01_votos_2)
    
     ### necesitamos la bdedatos de los votos stackeados para obtener nrow de los resultados electorales traspuestos y apilados:

    diputados2001_exp  <- diputados2001_01[c(numero_magico:numero_col)]
    resultados_traspuestos <- as.data.frame(t(diputados2001_exp))
    diputados2001_exp_2 <- stack(resultados_traspuestos)
    nrow(diputados2001_exp_2)
    timess = nrow(diputados2001_exp_2)/  numero_magico_del_terror
    ###
   
    f <- rep(fr, times=timess)
    f <- as.data.frame(f)

    al_fin <- cbind(diputados2001_v,f)

    # print(al_fin)
    diputadosrds_votos <- paste("diputados_j_0", n, "_votos_2001.rds", sep="")
    saveRDS(al_fin, diputadosrds_votos)

}

  else{
    data_rds <- paste("diputados_", n,    "_2001.rds", sep="")
    diputados2001_01 <- readRDS(data_rds)
    numero_col <- ncol(diputados2001_01)
    numero_magico  <- match("NRO_MESA",names(diputados2001_01))
    numero_magico  <-  ( numero_magico  + 1)

    # selecionamos los resultados electorales por lista:
    diputados2001_01_votos  <- diputados2001_01[c(numero_magico:numero_col)]
    resultados_traspuestos <- as.data.frame(t(diputados2001_01_votos))
    diputados2001_v <- stack(resultados_traspuestos)
    
    # Construímos la columnas de las listas

    numero_col <- ncol(diputados2001_01)
    numero_magico  <- match("NRO_MESA",names(diputados2001_01))
    numero_magico <- numero_magico + 1 
    numero_magico_del_terror <- numero_col - numero_magico + 1

    # extraemos los nombres de las listas:
     
    diputados2001_01_votos_2  <- diputados2001_01[c(numero_magico:numero_col)]

    fr <- names(diputados2001_01_votos_2)
    
     ### necesitamos la bdedatos de los votos stackeados para obtener nrow de los resultados electorales traspuestos y apilados:

    diputados2001_exp  <- diputados2001_01[c(numero_magico:numero_col)]
    resultados_traspuestos <- as.data.frame(t(diputados2001_exp))
    diputados2001_exp_2 <- stack(resultados_traspuestos)
    nrow(diputados2001_exp_2)
    timess = nrow(diputados2001_exp_2)/  numero_magico_del_terror
   
    f <- rep(fr, times=timess)
    f <- as.data.frame(f)

    al_fin <- cbind(diputados2001_v,f)

    # print(al_fin)
    diputadosrds_votos <- paste("diputados_j_", n, "_votos_2001.rds", sep="")
    saveRDS(al_fin, diputadosrds_votos)
  }

}
for (n in 1:11){
  funcion3(n)
}

4. Función que une la tabla de identificacion con la de resultados:

funcion4 <- function(n){
  
  if(n <= 9){
    
    rds_identificacion <- paste("diputados_repetidos_0", n,    "_2001.rds", sep="")
    
    rds_resultados <- paste("diputados_j_0", n,    "_votos_2001.rds", sep="")

    rds_identificacion <- readRDS(rds_identificacion)
    rds_resultados <- readRDS(rds_resultados)

    union_final <- cbind(rds_identificacion, rds_resultados)
    
    union_final <- union_final[,-7] 
    
        names(union_final)[1] <- "Circunscripcion"
        names(union_final)[2] <- "Distrito"
        names(union_final)[3] <- "Tipo de mesa"
        names(union_final)[4] <- "Nombre de la circunscripcion"
        names(union_final)[5] <- "Numero de mesa"
        names(union_final)[6] <- "votos"
    names(union_final)[7] <- "CODIGO"
    
    diputadosrds_votos <- paste("diputados_casifinal_0", n, "_votos_2001.rds", sep="")
    saveRDS(union_final, diputadosrds_votos)
    
    # print(union_final)
  }
  else{
        
    rds_identificacion <- paste("diputados_repetidos_", n,    "_2001.rds", sep="")
    
    rds_resultados <- paste("diputados_j_", n,    "_votos_2001.rds", sep="")
    
    rds_identificacion <- readRDS(rds_identificacion)
    rds_resultados <- readRDS(rds_resultados)

    union_final <- cbind(rds_identificacion, rds_resultados)
    
    union_final <- union_final[,-7] 
    
        names(union_final)[1] <- "Circunscripcion"
        names(union_final)[2] <- "Distrito"
        names(union_final)[3] <- "Tipo de mesa"
        names(union_final)[4] <- "Nombre de la circunscripcion"
        names(union_final)[5] <- "Numero de mesa"
        names(union_final)[6] <- "votos"
    names(union_final)[7] <- "CODIGO"
    
    diputadosrds_votos <- paste("diputados_casifinal_", n, "_votos_2001.rds", sep="")
    saveRDS(union_final, diputadosrds_votos)
    
    # print(union_final)
  }
}
for (n in 1:11){
  funcion4(n)
}

5. Añadimos la funcionalidad que asocia el nombre del candidato:

funcion5 <- function(n){
  
  if(n <= 9){
    
    diputados_nombres_0 <- paste("diputados_nombres_0", n,    "_2001.rds", sep="")
    diputados2001_01 <- readRDS(diputados_nombres_0)
    diputados2001_01 <-     diputados2001_01[,4:5]
    
    diputados_casifinal <- paste("diputados_casifinal_0", n,    "_votos_2001.rds", sep="")
        diputados_casifinal <- readRDS(diputados_casifinal)

    df = merge( x = diputados_casifinal, y = diputados2001_01, by = "CODIGO", all.x = TRUE)
    
    diputadosrds_votos_fff <- paste("diputados_casifinal_finalisimo_", n, "_votos_2001.rds", sep="")
    saveRDS(df, diputadosrds_votos_fff)

    # print(df)
  }
  else{
        diputados_nombres_0 <- paste("diputados_nombres_", n,    "_2001.rds", sep="")
    diputados2001_01 <- readRDS(diputados_nombres_0)
    diputados2001_01 <-     diputados2001_01[,4:5]
    
    diputados_casifinal <- paste("diputados_casifinal_", n,    "_votos_2001.rds", sep="")
        diputados_casifinal <- readRDS(diputados_casifinal)

    df = merge( x = diputados_casifinal, y = diputados2001_01, by = "CODIGO", all.x = TRUE)
    
    diputadosrds_votos_fff <- paste("diputados_casifinal_finalisimo_", n, "_votos_2001.rds", sep="")
    saveRDS(df, diputadosrds_votos_fff)

    print(head(df,5))
  }
}
for (n in 1:11){
  funcion5(n)
}
##   CODIGO Circunscripcion Distrito Tipo de mesa Nombre de la circunscripcion
## 1     A1               5       10            0                     LA LIGUA
## 2     A1               5       10            1                      LA CRUZ
## 3     A1               5       10            1                     QUINTERO
## 4     A1               5       10            1                      NOGALES
## 5     A1               5       10            0                      NOGALES
##   Numero de mesa votos                  NOMBRE
## 1              1    12 ZAIDA CANCINO SEPULVEDA
## 2              5     5 ZAIDA CANCINO SEPULVEDA
## 3             22    16 ZAIDA CANCINO SEPULVEDA
## 4              4     2 ZAIDA CANCINO SEPULVEDA
## 5              3    11 ZAIDA CANCINO SEPULVEDA
##   CODIGO Circunscripcion Distrito Tipo de mesa Nombre de la circunscripcion
## 1     A1               5       11            0                    LOS ANDES
## 2     A1               5       11            1                   SAN FELIPE
## 3     A1               5       11            0                  SANTA MARIA
## 4     A1               5       11            1                    RINCONADA
## 5     A1               5       11            0                    LLAY-LLAY
##   Numero de mesa votos                    NOMBRE
## 1              1     2 ALEJANDRO AGUILAR GAJARDO
## 2             53     6 ALEJANDRO AGUILAR GAJARDO
## 3              3    12 ALEJANDRO AGUILAR GAJARDO
## 4              1     8 ALEJANDRO AGUILAR GAJARDO
## 5             21    10 ALEJANDRO AGUILAR GAJARDO
FIN

Anexo: Una lógica difícil.

    diputados2001_01 <- readRDS("diputados_01_2001.rds")
    numero_col <- ncol(diputados2001_01)
    numero_magico  <- match("NRO_MESA",names(diputados2001_01))
    numero_magico  <-  ( numero_magico  + 1)

    # selecionamos los resultados electorales por lista:
    diputados2001_01_votos  <- diputados2001_01[c(numero_magico:numero_col)]
    resultados_traspuestos <- as.data.frame(t(diputados2001_01_votos))
    diputados2001_v <- stack(resultados_traspuestos)
    
    # Construímos la columnas de las listas

    numero_col <- ncol(diputados2001_01)
    numero_magico  <- match("NRO_MESA",names(diputados2001_01))
    numero_magico <- numero_magico + 1 
    numero_magico_del_terror <- numero_col - numero_magico + 1

    # extraemos los nombres de las listas:
     
    diputados2001_01_votos_2  <- diputados2001_01[c(numero_magico:numero_col)]

    fr <- names(diputados2001_01_votos_2)
    
     ### necesitamos la bdedatos de los votos stackeados para obtener nrow de los resultados electorales traspuestos y apilados:

    diputados2001_exp  <- diputados2001_01[c(numero_magico:numero_col)]
    resultados_traspuestos <- as.data.frame(t(diputados2001_exp))
    diputados2001_exp_2 <- stack(resultados_traspuestos)
    nrow(diputados2001_exp_2)
## [1] 7120
    timess = nrow(diputados2001_exp_2)/numero_magico_del_terror
   
    f <- rep(fr, times=timess)
    f <- as.data.frame(f)

    lo_logramos <- cbind(diputados2001_v,f)
    # print(lo_logramos)