Как бороться с неожиданными данными при чтении файла CSV? - PullRequest
3 голосов
/ 19 сентября 2019

Мне нужно прочитать CSV-файл с кодом

originalDataset <- fread("file.csv", 
                         encoding = "UTF-8", sep = ",", 
                         select = c("OperationDate","TenantID","Type","EMail","ClientType","Param4"))

. Септ ",", но иногда есть неожиданный формат строки, который возвращается внутрь, поэтому он делит строку на 2 строки, как 4-йстрока ниже.В этой ситуации я получил ошибку:

Ожидается 14 полей, но найдено 12.

Как я могу иметь дело с такого рода данными при чтении файла в?Заранее спасибо.

Данные

ID,DBID,OperationDate,TID,Type,EMail,ClientIPAddress,ClientType,Param1,Param2,Param3,Param4,Param5,Detail
619,1,2019-08-08 03:01:00.310,2300,101,a@example.com,3.10.226.203,C,639,0,0,NULL,NULL,ANULL
402,1,2019-08-08 02:50:51.300,2300,109,fa@example.com,3.10.226.203,C,639,0,0,NULL,NULL,NULL
395,1,2019-08-08 02:50:19.377,2300,101,a@example.com,3.10.226.203,C,6387,0,0,NULL,NULL,NULL
341,1,2019-08-08 01:46:21.390,2300,104,a@example.com,3.10.226.203,A,1352,23,234630,Here is an unexpected string
which has return,NULL,NULL
329,1,2019-08-08 01:45:52.673,2300,101,a@example.com,39.1.226.203,A,6411,0,0,NULL,NULL,NULL

1 Ответ

1 голос
/ 19 сентября 2019

Ваш оригинал выдает эту ошибку:

originalDataset <- fread("test.csv", 
                       encoding = "UTF-8", sep = ",", 
                       select = 
c("OperationDate","TID","Type","EMail","ClientType","Param4"))
Warning message:
In fread("test.csv", encoding = "UTF-8", sep = ",", select = c("OperationDate",  :
  Stopped early on line 5. Expected 14 fields but found 12. Consider fill=TRUE and comment.char=. First discarded non-empty line: <<341,1,2019-08-08 01:46:21.390,2300,104,a@example.com,3.10.226.203,A,1352,23,234630,Here is an unexpected >>

Когда я рекомендовал аргумент fill=TRUE, данные считываются правильно:

originalDataset <- fread("test.csv", 
                       encoding = "UTF-8", sep = ",", 
                       select = 
c("OperationDate","TID","Type","EMail","ClientType","Param4"), fill=TRUE)

> originalDataset
             OperationDate  TID Type          EMail ClientType                Param4
1: 2019-08-08 03:01:00.310 2300  101  a@example.com          C                  NULL
2: 2019-08-08 02:50:51.300 2300  109 fa@example.com          C                  NULL
3: 2019-08-08 02:50:19.377 2300  101  a@example.com          C                  NULL
4: 2019-08-08 01:46:21.390 2300  104  a@example.com          A Here is an unexpected
5:                           NA   NA                                                
6:                    NULL   NA   NA                                                
7: 2019-08-08 01:45:52.673 2300  101  a@example.com          A                  NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...