Reinaldo Chaves
Reinaldo Chaves

Reputation: 995

In R and read_delim, how do I read a CSV without quotes or trailing characters?

On a machine with Ubuntu and R 3.6.2 I want to open a CSV file

In LibreOffice I saw that the file has a ";" separator and ISO-8859-1 encoding

It is a file with no column names (header) and the data is in Brazilian Portuguese. Dates in DD/MM/YYYY HH:MM:SS format

There are some columns with unique identification codes, so with the exception of dates, I would like to keep all columns as a string

Here the content of the first line of the CSV as an example:

345365;99901000001201633;;BB – Banco do Brasil S.A.;Respondido;01/01/2016 09:24:13;consultar meu cpf . no spc e serasa;Consulta do cpf no serasa e spc;25/01/2016 23:59:59;NÃO;NÃO;Pelo sistema (com avisos por email);Internet;604629;Economia e Finanças;Economia;1;25/01/2016 11:30:39;Prezado(a) Sr(a). , Encaminhamos, em anexo, resposta ao seu pedido de informação. Atenciosamente, Serviço de Informação ao Cidadão do Banco do Brasil – SICBB Recurso Conforme a Lei 12527/11 em seu artigo Art. 15, no caso de indeferimento de acesso a informações ou às razões da negativa do acesso, poderá o interessado interpor recurso contra a decisão no prazo de 10 (dez) dias a contar da sua ciência. Parágrafo único. O recurso será dirigido à autoridade hierarquicamente superior à que exarou a decisão impugnada, que deverá se manifestar no prazo de 5 (cinco) dias.;Acesso Concedido;Resposta solicitada inserida no e-SIC

So I tried it like this first:

library(readr)
asks_2016 <- read_delim("2016/20200201_Pedidos_csv_2016.csv", 
                                         ";", escape_double = FALSE, col_names = FALSE, 
                                         locale = locale(encoding = "ISO-8859-1"))

But the dataframe returned is all NA

I had these warning messages:

Parsed with column specification:
cols(
  .default = col_logical(),
  X1 = col_double()
)
See spec(...) for full column specifications.
|==================================================================================| 100%  291 MB
Warning: 1923814 parsing failures.
row col               expected actual                                 file
  1  X1 no trailing characters        '2016/20200201_Pedidos_csv_2016.csv'
  1  X2 1/0/T/F/TRUE/FALSE            '2016/20200201_Pedidos_csv_2016.csv'
  1  X3 1/0/T/F/TRUE/FALSE            '2016/20200201_Pedidos_csv_2016.csv'
  1  X4 1/0/T/F/TRUE/FALSE            '2016/20200201_Pedidos_csv_2016.csv'
  1  X5 1/0/T/F/TRUE/FALSE            '2016/20200201_Pedidos_csv_2016.csv'
... ... ...................... ...... ....................................
See problems(...) for more details.

Please, does anyone know the correct way to load this CSV?

Upvotes: 1

Views: 2137

Answers (1)

Eugene Chong
Eugene Chong

Reputation: 1741

You can specify a default column format using col_types and cols(). Below, we specify everything should be read in as a character.

library(readr)
asks_2016 <- read_delim("2016/20200201_Pedidos_csv_2016.csv", 
                        ";", escape_double = FALSE, col_names = FALSE, 
                        locale = locale(encoding = "ISO-8859-1"),
                        col_types = cols(.default = "c"))

Then turn the date column into POSIXct.

asks_2016$datetime <- as.POSIXct(asks_2016$X18, format = "%d/%m/%Y %H:%M:%S")

head(asks_2016)

# A tibble: 1 x 22
  X1     X2     X3    X4       X5     X6      X7       X8     X9     X10   X11   X12     X13   X14   X15    X16   X17   X18    X19               X20   X21     datetime           
  <chr>  <chr>  <chr> <chr>    <chr>  <chr>   <chr>    <chr>  <chr>  <chr> <chr> <chr>   <chr> <chr> <chr>  <chr> <chr> <chr>  <chr>             <chr> <chr>   <dttm>             
1 345365 99901~ NA    "BB â\u~ Respo~ 01/01/~ consult~ Consu~ 25/01~ "NÃ\~ "NÃ\~ Pelo s~ Inte~ 6046~ Econo~ Econ~ 1     25/01~ "Prezado(a) Sr(a~ Aces~ Respos~ 2016-01-25 11:30:39

Upvotes: 2

Related Questions