【问题标题】:How to read a csv file with unquoted new line \n character into R?如何将带有未引用的换行符\n字符的csv文件读入R?
【发布时间】:2015-08-08 14:05:13
【问题描述】:

我正在使用来自data.tablefreadcsv 文件读入R。读取过程因此错误而停止:

fstDF <- fread("dat.csv")
Read 34.5% of 2000004 rowsError in fread("dat.csv") : 
  Expected sep (',') but new line or EOF ends field 25 on line 800747 when reading data: John,,,ID,362526197318501X,M,19730218, ,,F,,CHN,44,4403,,,,,,,13828890538,,, ,M

我检查了数据,发现错误是由于字段中的换行符将一行记录分成两行造成的。就像下面示例数据中以Steve 开头的行一样:

Name,CardNo,Descriot,CtfTp,CtfId,Gender,Birthday,Address,Zip,Dirty,District1,District2,District3,District4,District5,District
6,FirstNm,LastNm,Duty,Mobile,Tel,Fax,EMail,Nation,Taste,Education,Company,CTel,CAddress,CZip,Family,Version,id              
Mike,,,OTH,010-116321,M,19000101,,100080, ,,CHN,0,0,,,,,,10116,010-82808028,010-82828028-208,chenmeng@dist.
Steve,,,GID,0282,M,19000101,,051430, ,,CHN
,0,0,,,,,,13831193762,0311-88030066,0311-88030088,info@shineway.com,,,,,   
Nicholas,,,OTH,010-125321,F,19000101,,100097,,,CHN,0,0,,,,,,10125,010-88400202,010-88400260,,,,,,,,,,,4
Abrham,,,OTH,010-130321,F,19000101,,100029,,,CHN,0,0,,,,,,10130,010-51292052/3-802,010-51292052/3-811,
Bill,,,OTH,010-142321,F,19000101,,100007,,,CHN,0,0,,,,,,10142,010-67687044,010-67687044,baiguoshouyue@sina       
Zabrina,,,OTH,010-186321,F,19000101,,100101,,,CHN,0,0,,,,,,13942697025,010-64869596/0411-668895950,0411-6688519
Julia,,,OTH,021-044321,M,19000101,,201206,,,CHN,0,0,,,,,,21044,021-28995000*208,021-50315077,jane.dai@parker.com  
Dave,,,OTH,021-127321,M,19000101,,200008,,,CHN,0,0,,,,,,21127,021-55150244,021-55150344,,,,,,,,,,,9     
Cecilia,,,OTH,021-151321,F,19000101,,201108,,,CHN,0,0,,,,,,21151,021-61451188,021-61452602,reception.china@eurotherm.co

此数据是从Microsoft SQL Server 导出的。我无法访问数据库,我不知道导出过程有什么问题。但我肯定知道这是错误的换行符导致阅读问题。

这是关于 stackoverflow 的类似问题(没有明确的解决方案): Importing csv file to R new line issue

问题:

如何用换行符读取csv 数据?

【问题讨论】:

  • 添加sep=","sep2="\n" 有效吗?
  • @Jaap 不幸的是,它不起作用(带有相同的错误消息)。还是谢谢大家。
  • 改用read.csv。它适用于我的系统。
  • @Jaap 有 200 万行数据,我还在等待read.csv 完成。
  • 你可能会找到一些有用的替代品here

标签: r csv data.table


【解决方案1】:

第一步:删除行中间的^M

perl -pe 's/\r(?!\n)//g'

参考:How to remove carriage returns in the middle of a line

第 2 步:将 \n, 替换为 ,(请参阅下面的 @jimmij 答案。)

perl -p00e 's/\n,/,/g' 

参考:https://unix.stackexchange.com/questions/222049/how-to-detect-and-remove-newline-character-within-a-column-in-a-csv-file/222052#222052

第 3 步:在 fread 中照常阅读:

fstDT <- fread("dat.csv")

Read 1999993 rows and 33 (of 33) columns from 0.324 GB file in 00:00:49

【讨论】:

    猜你喜欢
    • 2018-07-01
    • 1970-01-01
    • 2016-12-17
    • 2013-08-13
    • 2023-03-27
    • 1970-01-01
    • 2020-05-21
    • 2014-04-18
    • 2021-12-17
    相关资源
    最近更新 更多