Estou tentando ler o seguinte arquivo CSV do partyfacts com readr
.
A importação resulta em problemas, mas na realidade não há problemas.
download.file("https://partyfacts.herokuapp.com/download/external-parties-csv/", "partyfacts-external-parties.csv")
df <- readr::read_csv("partyfacts-external-parties.csv", show_col_types = FALSE)
Aviso: Um ou mais problemas de análise, consulte
problems()
seu quadro de dados para obter detalhes,por exemplo:
isso <- vroom(...)
problemas(dat)
Vamos ver o que temos:
nrow(problems(df))
86
problems(df)[1,]
# A tibble: 1 × 5 linha col esperado arquivo real
<int> <int> <chr> <chr> <chr>
35519 15 17 colunas 15 colunas /home/raffaele/Downloads/external-parties.csv
Mas na realidade não há problemas.
A linha 35519 é:
BIH,elecglob,292,SNSD,Aliança dos Social-democratas Independentes,Aliança dos Social-democratas Independentes,1998,2014,19.1,2006,,,2019-02-08 19:26:26.193233+00:00,2021-03-12 10:15:38.362019+00:00,30450,292,2019-02-08 19:26:26.296626+00:00
Que contém corretamente 17 colunas, não 15.
Os outros 84 problemas são da mesma natureza (ler menos colunas do que o esperado) e um raciocínio semelhante se aplica (o número de colunas no arquivo de origem está correto).
EDIT: O texto que relatei para a linha é obtido de um editor de texto. Aparentemente, os números de linha não são os mesmos que obtive do R.
O arquivo é enorme, então é difícil examiná-lo. Uma maneira de diagnosticar problemas como esse é tornar o arquivo menor, excluindo linhas que estão boas. Eu fiz isso e obtive esse arquivo, mantendo apenas as duas primeiras linhas, a primeira linha que mostrou um erro e uma linha depois dela (que também mostra um erro):
A terceira e quarta linhas mostradas acima estavam em algum lugar em torno da linha 35440 no arquivo original e, como você pode ver, elas não seguem o mesmo formato da linha anterior: os dois campos finais estão faltando.
read.csv()
não reclama sobre esse arquivo, porque ele está documentado para preencher campos faltantes com espaços em branco, a menos que você o chame comfill = FALSE
. Quando faço isso, recebo um erro.