-
Notifications
You must be signed in to change notification settings - Fork 1
/
recode_grid.R
165 lines (118 loc) 路 5.86 KB
/
recode_grid.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#'Recodifica id de grillas asignados a provincias o departamentos de Argentina
#' (\emph{Recode Argentina's districs id in grids})
#'@description
#'
#'Funci贸n que permite re codificar etiquetas para utilizaci贸n de grillas de Argentina y de departamentos para los 24 distritos
#' sub nacionales. Ello permite hacer mas sencilla la vinculaci贸n con bases de datos de diversas fuentes.
#'
#'@return Los valores por defecto en \code{\link{get_grid}} son \code{codprov} para provincia y \code{coddepto} para departamentos, respectivamente.
#' Estos corresponden a la codificaci贸n de los escrutinios provisorios de elecciones nacionales y se etiquetaron como \code{'indra'} .
#' Se puede optar por la nomenclatura de \code{'indec'}, con la familia \code{\*_censo}, para ambos niveles, o la de \code{'iso'} con \code{\*_iso} ,
#' para el nivel provincial.
#'
#'@details Respecto el origen de los datos se puede consultar la documentaci贸n de
#' \href{https://www.iso.org/obp/ui/#iso:code:3166:AR}{\code{ISO 3166-2} - International Organization for Standardization} y
#' del \href{https://www.iso.org/obp/ui/#iso:code:3166:AR}{\emph{INDEC}}.
#'
#'@details \code{codprov} y \code{coddepto} son las codificaciones de las bases de datos de \emph{INDRA}, empresa encargada por
#' muchos a帽os de la tarea del escrutinio provisorio y utilizados en \href{https://electorarg.github.io/polAr/}{polAr}.
#'
#'@param type la variante del c贸digo que se quiere definir para la grilla. Las opciones son \code{'indra'}, \code{'indec'} o \code{'iso'}.
#'
#'@param data data.frame obtenido con \code{\link{get_grid}}. Las grillas disponibles
#' se pueden chequear con \code{\link{show_arg_codes}}.
#'
#'
#'
#' @examples
#'
#' get_grid("ARGENTINA")
#'
#'
#' get_grid("ARGENTINA") %>%
#' recode_grid(type = "iso")
#'
#'
#'@export
recode_grid<- function(data,
type = NULL){
# Check parameters
assertthat::assert_that(is.data.frame(data),
msg = glue::glue("{data} debe ser un 'data.frame' obtenido con la funcion get_grid()"))
assertthat::assert_that(dim(data)[2] == 5,
msg = glue::glue("{data} debe ser un 'data.frame' obtenido con la funcion get_grid()"))
assertthat::assert_that(is.character(type),
msg = "type debe ser del tipo 'character'")
if("CABA" %in% data$name){
assertthat::assert_that(is.character(type),
msg = "type debe ser del tipo 'character'")
assertthat::assert_that(length(type) == 1,
msg = glue::glue("{type} no es una opcion valida para recodificar grillas de provincias.
Debe elegir una opcion entre 'indra', 'indec' o 'iso'"))
assertthat::assert_that(type %in% c("indra", "indec", "iso"),
msg = glue::glue("{type} no es una opcion valida ('indra', 'indec', 'iso')"))
full_codes <- geo_metadata %>%
dplyr::select(codprov, codprov_censo, codprov_iso) %>%
dplyr::distinct()
if(type == "indec"){
data %>%
dplyr::left_join(full_codes, by = c("code" = "codprov")) %>%
dplyr::select(name, row, col, code = codprov_censo)
} else if(type == "iso"){
data %>%
dplyr::left_join(full_codes, by = c("code" = "codprov")) %>%
dplyr::select(name, row, col, code = codprov_iso)
} else{
data %>%
dplyr::select(name, row, col, code)
}
} else {
assertthat::assert_that(is.character(type),
msg = "type debe ser del tipo 'character'")
assertthat::assert_that(length(type) == 1,
msg = glue::glue("{type} no es una opcion valida para recodificar grillas de departamentos.
Debe elegir una opcion entre 'indra'o 'indec'"))
assertthat::assert_that(type %in% c("indra", "indec"),
msg = glue::glue("{type} no es una opcion valida para recodificar grillas de departamentos.
Debe elegir una opcion entre 'indra'o 'indec'"))
#### hack para filtrar grilla de departamento que se quiere recodear
# Me traigo todos los id de depto de todas las provincias y genero un id unico
full_codes <- geo_metadata %>%
dplyr::select(coddepto, nomdepto_censo,coddepto_censo, name_prov) %>%
dplyr::mutate(nomdepto_censo = stringr::str_to_upper(nomdepto_censo),
id = paste0(coddepto,
stringr::str_remove_all(string = nomdepto_censo,
pattern = " "),
name_prov))
# agrego a la base de grillas el mismo codigo de id de la metadata
grillas_depto_id <- grillas_geofacet %>%
dplyr::bind_rows(.id = "name_prov") %>%
tidyr::as_tibble() %>%
dplyr::slice(25:dim(.)[1]) %>%
dplyr::mutate(code = stringr::str_pad(code, 3, "left", 0),
id = paste0(code,
stringr::str_remove_all(string = name,
pattern = " "),
name_prov))
# Creo filtro para seleccionar grilla correcta
filtro_provincia <- data %>%
dplyr::left_join(grillas_depto_id) %>%
dplyr::left_join(full_codes)
filtro_id <- filtro_provincia %>%
dplyr::pull(id)
# filtro la grilla de interes
data <- grillas_depto_id %>%
dplyr::filter(id %in% filtro_id) %>%
dplyr::select(name, row, col, code)
#######################################################################
if(type == "indec"){
data %>%
dplyr::mutate(code = dplyr::case_when(
code == filtro_provincia$coddepto ~ filtro_provincia$coddepto_censo
)) %>%
dplyr::select(name, row, col, code)
} else{
data
}
}
}