1 El problema

http://www.tce.cl/resultados-electorales/

Tenemos el excel del Tricel que contiene filas que queremos transformar en columnas: la de las listas, para poder filtrarlas.

Tenemos en otra hoja el diccionario lista-candidato

Queremos asociar las listas con los nombres.

el formato al que queremos llegar es:

2 El código

1 Carguemos el excel de diputados y veamos sus dimensiones:

n<-"diputados_01_1989.xlsx"
diputados  <- read_xlsx(n, sheet = 2)
saveRDS(diputados, "diputados_01_1989.rds")
dataset_diputados  <- readRDS("diputados_01_1989.rds")
dataset_diputados <- as.data.frame(dataset_diputados)
colnames(dataset_diputados)
##  [1] "DISTRITO"   "REGIONP"    "JUNTAP"     "PROVINCIAP" "COMUNAP"   
##  [6] "NOM_COMUNA" "CIRP"       "NOM_CIR"    "TIPOMESAP"  "NRO_MESA"  
## [11] "A1"         "A2"         "B1"         "B2"         "E1"        
## [16] "E2"         "G1"         "G2"         "I1"         "V_NULOS"   
## [21] "V_BLANCOS"  "TOTAL"      "COLEGIO"
numcol<-ncol(dataset_diputados)
numcol
## [1] 23
numrow<-nrow(dataset_diputados)
# head(dataset_diputados,1)
nrow(dataset_diputados)
## [1] 315

2 Establezcamos el limite_primer_dataset y el numero de veces que debemos repetir las mesas para que se ajusten a la cantidad de listas que vamos a verticalizar.

limite_primer_dataset<- 10
inicio_segundo_dataset<- limite_primer_dataset+1
repetir_mesas <- numcol - limite_primer_dataset
repetir_mesas
## [1] 13

3 Construimos el objeto mesas y lo repetimos.

mesas <- dataset_diputados[,1:limite_primer_dataset]
data_diputados_sub_mesas<-mesas[rep(seq_len(nrow(mesas)), each = repetir_mesas), ]
head(data_diputados_sub_mesas,1)
##   DISTRITO REGIONP JUNTAP PROVINCIAP COMUNAP NOM_COMUNA CIRP NOM_CIR TIPOMESAP
## 1        1      NA      1          1       1      ARICA    1   ARICA         0
##   NRO_MESA
## 1        1
nrow(data_diputados_sub_mesas)
## [1] 4095

4 Creamos la columna de resultados trasponiéndola y apilándola

resultados <- dataset_diputados[,inicio_segundo_dataset:numcol]
resultados_traspuestos <- as.data.frame(t(resultados))
# ncol(resultados_traspuestos)
# nrow(resultados_traspuestos)
resultados_stack<-stack(resultados_traspuestos)
# nrow(resultados_stack)
# ncol(resultados_stack)
head(resultados_stack,1)
##   values ind
## 1     67  V1

5 Creamos la columna de resultados trasponiéndola y apilándola

resultados <- dataset_diputados[,inicio_segundo_dataset:numcol]
nombre <- colnames(resultados)
# nombre

l<-rep(nombre, times=nrow(dataset_diputados))
ll<-as.data.frame(l)
nrow(ll)
## [1] 4095

6 Unimos los 3 datasets

diputados_1989_unidos <- cbind(data_diputados_sub_mesas, resultados_stack, ll)
 head(diputados_1989_unidos,1)
##   DISTRITO REGIONP JUNTAP PROVINCIAP COMUNAP NOM_COMUNA CIRP NOM_CIR TIPOMESAP
## 1        1      NA      1          1       1      ARICA    1   ARICA         0
##   NRO_MESA values ind  l
## 1        1     67  V1 A1
  ncol(diputados_1989_unidos)
## [1] 13
  numerocol<-ncol(diputados_1989_unidos)

7 vamos a renombrar la columna l por CODIGO

names(diputados_1989_unidos)[numerocol] <- "CODIGO"
head(diputados_1989_unidos,1)
##   DISTRITO REGIONP JUNTAP PROVINCIAP COMUNAP NOM_COMUNA CIRP NOM_CIR TIPOMESAP
## 1        1      NA      1          1       1      ARICA    1   ARICA         0
##   NRO_MESA values ind CODIGO
## 1        1     67  V1     A1
nrow(diputados_1989_unidos)
## [1] 4095

8 Creamos el dataset de candidatos

diputados  <- read_xlsx(n)
saveRDS(diputados, "senadores_19_1989_n.rds")
dataset_nombres_diputados  <- readRDS("senadores_19_1989_n.rds")
dataset_nombres_diputados <- as.data.frame(dataset_nombres_diputados)
head(dataset_nombres_diputados,15)
##    DISTRITO LISTA CODIGO NUMERO                          NOMBRE VOTACION
## 1         1     A     A1      9        LUIS LE BLANC VALENZUELA    21314
## 2         1     A     A2     10           LUIS GUTIERREZ TORRES    15564
## 3         1     B     B1     11           PATRICIO DURAN GATICA     5098
## 4         1     B     B2     12          CARLOS VALCARCE MEDINA    21497
## 5         1     E     E1     13 VICENTE JESUS ECHEVERRIA GUZMAN     2584
## 6         1     E     E2     14            PABLO PIZARRO BOSSAY     4974
## 7         1     G     G1     15         JUAN RESTELLI PORTUGUEZ     5070
## 8         1     G     G2     16             OREL VICIANI ESCKER     7089
## 9         1     I     I1     17     PATRICIO ARANCIBIA BEAUMONT     1784
## 10        1  <NA>    V_N     99                     VOTOS NULOS     2917
## 11        1  <NA>    V_B     99                   VOTOS BLANCOS     2486
## 12        1  <NA>    T_M     99                  TOTAL DISTRITO    90377
## 13       NA  <NA>   <NA>   <NA>                            <NA>     <NA>
## 14       NA  <NA>   <NA>   <NA>                            <NA>     <NA>
## 15       NA  <NA>   <NA>   <NA>                            <NA>     <NA>
##      ELECTO
## 1  DIPUTADO
## 2      <NA>
## 3      <NA>
## 4  DIPUTADO
## 5      <NA>
## 6      <NA>
## 7      <NA>
## 8      <NA>
## 9      <NA>
## 10     <NA>
## 11     <NA>
## 12     <NA>
## 13     <NA>
## 14     <NA>
## 15     <NA>
# dataset_nombres_diputados <- dataset_nombres_diputados[!is.na(dataset_nombres_diputados$LISTA),]
# head(dataset_nombres_diputados,15)

9 Debemos seleccionar manualmente las columnas y las filas para construir nuesro dataframe.

# dataset_nombres_diputados <- dataset_nombres_diputados[!is.na(dataset_nombres_diputados$TOTAL),]
# names(dataset_nombres_diputados)[6] <- "NOMBRE"
numero_codigo<-nrow(dataset_nombres_diputados)-1
dataset_nombres_diputados_sub<-dataset_nombres_diputados[ c(3,5)]
dataset_nombres_diputados_final<-dataset_nombres_diputados_sub[1:9, ]

dataset_nombres_diputados_sub
##    CODIGO                          NOMBRE
## 1      A1        LUIS LE BLANC VALENZUELA
## 2      A2           LUIS GUTIERREZ TORRES
## 3      B1           PATRICIO DURAN GATICA
## 4      B2          CARLOS VALCARCE MEDINA
## 5      E1 VICENTE JESUS ECHEVERRIA GUZMAN
## 6      E2            PABLO PIZARRO BOSSAY
## 7      G1         JUAN RESTELLI PORTUGUEZ
## 8      G2             OREL VICIANI ESCKER
## 9      I1     PATRICIO ARANCIBIA BEAUMONT
## 10    V_N                     VOTOS NULOS
## 11    V_B                   VOTOS BLANCOS
## 12    T_M                  TOTAL DISTRITO
## 13   <NA>                            <NA>
## 14   <NA>                            <NA>
## 15   <NA>                            <NA>
## 16   <NA>                            <NA>
## 17   <NA>                            <NA>
## 18   <NA>                            <NA>
## 19   <NA>                         REGIONP
## 20   <NA>                         NRO_CIR
## 21   <NA>                         NRO_DIS
## 22   <NA>                          JUNTAP
## 23   <NA>                      PROVINCIAP
## 24   <NA>                         COMUNAP
## 25   <NA>                      NOM_COMUNA
## 26   <NA>                       TIPOMESAP
## 27   <NA>                            CIRP
## 28   <NA>                         NOM_CIR
## 29   <NA>                             T_M
dataset_nombres_diputados_final
##   CODIGO                          NOMBRE
## 1     A1        LUIS LE BLANC VALENZUELA
## 2     A2           LUIS GUTIERREZ TORRES
## 3     B1           PATRICIO DURAN GATICA
## 4     B2          CARLOS VALCARCE MEDINA
## 5     E1 VICENTE JESUS ECHEVERRIA GUZMAN
## 6     E2            PABLO PIZARRO BOSSAY
## 7     G1         JUAN RESTELLI PORTUGUEZ
## 8     G2             OREL VICIANI ESCKER
## 9     I1     PATRICIO ARANCIBIA BEAUMONT

10 y obtenemos el dataset final

df = merge( x = diputados_1989_unidos, y = dataset_nombres_diputados_final, by = "CODIGO", all.x = TRUE)
nrow(df)
## [1] 4095
head(df,10)
##    CODIGO DISTRITO REGIONP JUNTAP PROVINCIAP COMUNAP NOM_COMUNA CIRP NOM_CIR
## 1      A1        1      NA      1          1       1      ARICA    1   ARICA
## 2      A1        1      NA      1          1       1      ARICA    1   ARICA
## 3      A1        1      NA      1          1       1      ARICA    1   ARICA
## 4      A1        1      NA      1          1       1      ARICA    1   ARICA
## 5      A1        1      NA      1          1       1      ARICA    1   ARICA
## 6      A1        1      NA      1          1       1      ARICA    1   ARICA
## 7      A1        1      NA      1          1       1      ARICA    1   ARICA
## 8      A1        1      NA      1          1       1      ARICA    2   ARICA
## 9      A1        1      NA      1          1       1      ARICA    1   ARICA
## 10     A1        1      NA      1          1       1      ARICA    1   ARICA
##    TIPOMESAP NRO_MESA values  ind                   NOMBRE
## 1          0       58     87  V58 LUIS LE BLANC VALENZUELA
## 2          0       29     68  V29 LUIS LE BLANC VALENZUELA
## 3          0       30     68  V30 LUIS LE BLANC VALENZUELA
## 4          0       61     92  V61 LUIS LE BLANC VALENZUELA
## 5          0       62     63  V62 LUIS LE BLANC VALENZUELA
## 6          0       59     72  V59 LUIS LE BLANC VALENZUELA
## 7          0       60     79  V60 LUIS LE BLANC VALENZUELA
## 8          1       28     55 V181 LUIS LE BLANC VALENZUELA
## 9          0       57     90  V57 LUIS LE BLANC VALENZUELA
## 10         0       31     72  V31 LUIS LE BLANC VALENZUELA

11 Guardamos

saveRDS(df, "senadores_19_1989_corregido.rds")