在R和read_delim中,如何读取不带引号或结尾字符的CSV?

问题描述 投票:0回答:1

在装有Ubuntu和R 3.6.2的计算机上,我想打开CSV文件

[在LibreOffice中,我看到该文件带有一个“;”分隔符和ISO-8859-1编码

这是没有列名(标题)的文件,数据为巴西葡萄牙语。 DD / MM / YYYY HH:MM:SS格式的日期

有些列具有唯一的识别码,所以除日期外,我想将所有列都保留为字符串

这里以CSV第一行的内容为例:

345365; 99901000001201633 ;; BB –巴西巴西银行; 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 eFinanças; Economia; 1; 25 / 01/2016 11:30:39; Prezado(a)Sr(a)。 ,恩卡米纳莫斯(Encaminhamos),埃纳莫索(em anexo),信息通报。巴西巴西市政厅Atenciosamente –巴西SICBB Recurso遵从art527 Art的Lei 12527/11。 15日,没有因人而异的诉求,就因违反第10条因果关系而被判刑。 Parúgrafoúnico。 O recursoserádirigidoàautoridade hierarquicamente superioràex exarou adecisãoimpugnada,quedeveráse manifestar no prazo de 5(cinco)dias。; Acesso Concedido; Resposta solicitada inserida no e-SIC

所以我首先这样尝试:

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

但是返回的数据帧全为NA

我有这些警告消息:

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.

请,有人知道加载此CSV的正确方法吗?

r csv separator readr trailing
1个回答
0
投票

您可以使用col_typescols()指定默认的列格式。在下面,我们指定所有内容都应作为字符读取。

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"))

然后将日期列转换为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
© www.soinside.com 2019 - 2024. All rights reserved.