如何在内部使用双字符串读取csv

时间:2019-04-05 16:06:19

标签: r

晚上好,

我想读取一个csv文件,该文件与字符串分开,但也包含一些。这将很容易解决,但是我的csv确实很奇怪,因为在字符串中的行中有双“”甚至三重“”“,在字符串中不知道是谁这样做的,但我必须处理。

以下是我的csv外观的示例:

StationID,Longitude,Latitude,Height,Remark
0000002,26.074412,44.446770,0,Bucuresti
0000003,1.811446,50.901549,0,Calais
0000004,1.075329,51.284212,0,Canterbury
0000005,-3.543547,50.729172,0,Exeter
"0000007,9.733756,46.922368,744,""Fideris, Bahnhof"""
0000008,8.571251,50.051219,0,Frankfurt Flughafen
0000009,18.643803,54.355520,0,Gdansk
0000011,7.389462,47.191804,467,Grenchen

如您所见,StationID 0000007很难实现。

我唯一能做的就是这样:

StationID Longitude Latitude Height              Remark
1                                           0000002 26.074412 44.44677      0           Bucuresti
2                                           0000003  1.811446 50.90155      0              Calais
3                                           0000004  1.075329 51.28421      0          Canterbury
4                                           0000005 -3.543547 50.72917      0              Exeter
5 0000007,9.733756,46.922368,744,"Fideris, Bahnhof"        NA       NA     NA                    
6                                           0000008  8.571251 50.05122      0 Frankfurt Flughafen
7                                           0000009 18.643803 54.35552      0              Gdansk
8                                           0000011  7.389462 47.19180    467            Grenchen

我希望有人能帮助我

1 个答案:

答案 0 :(得分:0)

在示例数据中,删除出现在行首和结尾处的所有双引号并用一个双引号替换连续双引号的字符串似乎就足够了。

L <- readLines("myfile.txt")
read.csv(text = gsub('"+', '"', sub('^"(.*)"$', '\\1', L)), 
   colClasses = c(StationID = "character", Remark = "character"))

给予:

  StationID Longitude Latitude Height              Remark
1   0000002 26.074412 44.44677      0           Bucuresti
2   0000003  1.811446 50.90155      0              Calais
3   0000004  1.075329 51.28421      0          Canterbury
4   0000005 -3.543547 50.72917      0              Exeter
5   0000007  9.733756 46.92237    744    Fideris, Bahnhof
6   0000008  8.571251 50.05122      0 Frankfurt Flughafen
7   0000009 18.643803 54.35552      0              Gdansk
8   0000011  7.389462 47.19180    467            Grenchen