Прочитать вложенный JSON и преобразовать его в аккуратные данные
Я пытаюсь преобразовать JSON в тибле, который следует принципам Tidy Data.
На веб-сайте http://pv.servelelecciones.cl/ есть несколько хороших региональных данных. Поскольку я не могу предоставить прямую ссылку на "регион Айсен", поскольку URL-адрес не изменяется, это данные, которые они отображают:
|listapacto |partido |votos|porcentaje|electo|
|------------------------------------|---------|-----|----------|------|
|H. SUMEMOS | |365 |4,52% | |
|TODOS | |113 |1,40% | |
|50. EDUARDO ROMO LAFOY |IND-TODOS|69 |0,86% | |
|51. SARA MARTINEZ MONDELO |IND-TODOS|44 |0,55% | |
|CIUDADANOS | |252 |3,12% | |
|52. VICTOR MANUEL BORQUEZ FINCKE |CIUD. |53 |0,66% | |
|53. MARISOL LUSDEMIA PINILLA VEJAR |CIUD. |199 |2,47% | |
|K. COALICIÓN REGIONALISTA VERDE | |200 |2,48% | |
|DEMOCRACIA REGIONAL PATAGONICA | |200 |2,48% | |
|54. ELSON BORQUEZ YAÑEZ |DRP |59 |0,73% | |
|55. PEDRO ANTONIO VERGARA ROJAS |DRP |42 |0,52% | |
|56. JESSICA ANDREA TORRES BORQUEZ |IND-DRP |59 |0,73% | |
|57. TAMARA ANDREA ESPINOZA GUTIERREZ|DRP |40 |0,50% | |
|N. LA FUERZA DE LA MAYORIA | |2.958|36,66% | |
|PARTIDO RADICAL SOCIALDEMOCRATA | |346 |4,29% | |
|58. JORGE CALDERON NUÑEZ |PRSD |346 |4,29% | |
|PARTIDO SOCIALISTA DE CHILE | |1.651|20,46% | |
|59. MARISOL MARTINEZ SANCHEZ |PSCH |1.651|20,46% | |
|PARTIDO COMUNISTA DE CHILE | |322 |3,99% | |
|60. ROXANA PEY TUMANOFF |IND-PCCH |322 |3,99% | |
|PARTIDO POR LA DEMOCRACIA | |639 |7,92% | |
|61. RENE OSVALDO ALINCO BUSTOS |IND-PPD |639 |7,92% |* |
|O. CONVERGENCIA DEMOCRATICA | |2.297|28,47% | |
|PARTIDO DEMOCRATA CRISTIANO | |2.297|28,47% | |
|62. MIGUEL ANGEL CALISTO AGUILA |PDC |1.882|23,32% |* |
|63. CARMEN GLORIA MARTINEZ CARDENAS |PDC |224 |2,78% | |
|64. RENE ANSELMO LEGUE CARDENAS |PDC |191 |2,37% | |
|P. CHILE VAMOS | |1.963|24,33% | |
|UNION DEMOCRATA INDEPENDIENTE | |605 |7,50% | |
|65. NESTOR MERA MUÑOZ |UDI |605 |7,50% | |
|PARTIDO REGIONALISTA INDEPENDIENTE | |132 |1,64% | |
|66. PATRICIO HENRIQUEZ BARRIENTOS |PRI |132 |1,64% | |
|EVOLUCION POLITICA | |365 |4,52% | |
|67. GEOCONDA NAVARRETE ARRATIA |EVOP. |365 |4,52% | |
|RENOVACION NACIONAL | |861 |10,67% | |
|68. ARACELY LEUQUEN URIBE |RN |861 |10,67% |* |
|CANDIDATURA INDEPENDIENTE | |286 |3,54% | |
|69. CECILIO AGUILAR GALINDO |IND |286 |3,54% | |
Я хотел бы прочитать данные json, которые подают на их веб-сайт, чтобы получить табличку, подобную приведенной выше таблице, и перейти к такой аккуратной структуре.
Если я просто попытаюсь прочитать данные напрямую:
require(data.table)
require(jsonlite)
require(dplyr)
x <- fromJSON("http://www.servelelecciones.cl/data/elecciones_diputados/computo/comunas/114501.json")
y <- as_tibble(x$data)
Затем я получаю некоторую заблокированную информацию в последнем столбце:
> y
# A tibble: 6 x 7
a b c d e f sd
* <chr> <lgl> <chr> <chr> <chr> <chr> <list>
1 H. SUMEMOS NA 365 4,52% 4 "" <data.frame [2 × 7]>
2 K. COALICIÓN REGIONALISTA VERDE NA 200 2,48% 4 "" <data.frame [1 × 7]>
3 N. LA FUERZA DE LA MAYORIA NA 2.958 36,66% 4 "" <data.frame [4 × 7]>
4 O. CONVERGENCIA DEMOCRATICA NA 2.297 28,47% 3 "" <data.frame [1 × 7]>
5 P. CHILE VAMOS NA 1.963 24,33% 4 "" <data.frame [4 × 7]>
6 CANDIDATURA INDEPENDIENTE NA 286 3,54% NA NA <data.frame [1 × 7]>
Конечно пробовал
Любая помощь приветствуется.
1 ответ
Одна из возможностей, вместо написания функции, это использовать tidyr
и вкладывать столько раз, сколько требуется.
В моем случае:
require(data.table)
require(jsonlite)
require(dplyr)
require(tidyr)
x <- fromJSON("http://www.servelelecciones.cl/data/elecciones_diputados/computo/comunas/114501.json")
y <- as_tibble(x$data)
y1 <- y %>% filter(a == "CANDIDATURA INDEPENDIENTE")
y2 <- y %>% filter(a != "CANDIDATURA INDEPENDIENTE") %>% unnest(sd)