如何读取列中带双引号的分号分隔文件?

时间:2015-12-09 07:57:30

标签: r csv

我有一个分号分隔的文件,我想阅读。文件中的数据如下。在第4行,我希望只能读取4列。

但是我没有在R中这样做。

ID;Comment;Date;Amt
1;Hello;5-06-2003;85.13
2;World;5-06-2013;127.39
3;Airlines;5-06-1999;148.34
4;"Air"l;ine"s";5-09-2013;87.94

data<-read.table(fileName,header=T,sep = ";",quote="\"",na.strings = c("" , ".", "-", "NA" ));

上述代码不起作用。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:6)

来自require('fs')包的

fread,可以处理此类&#34;例外&#34;很好,这将是解决这个问题的一种方法。

data.table

答案 1 :(得分:3)

另一种方法是使用一些美味的正则表达式

path <- tempfile()
writeLines('ID;Comment;Date;Amt
1;Hello;5-06-2003;85.13
2;World;5-06-2013;127.39
3;Airlines;5-06-1999;148.34
4;"Air"l;ine"s";5-09-2013;87.94', path)


(rl <- scan(path, what = ''))

read.table(text = gsub('^(\\w+);(.*?);(Date|[-0-9]+);(Amt|[0-9.]+)$',
                       '\\1 \\2 \\3 \\4', rl),
           quote = '', header = TRUE, stringsAsFactors = FALSE)

#   ID       Comment      Date    Amt
# 1  1         Hello 5-06-2003  85.13
# 2  2         World 5-06-2013 127.39
# 3  3      Airlines 5-06-1999 148.34
# 4  4 "Air"l;ine"s" 5-09-2013  87.94

简化版提供相同的东西

read.table(text = gsub('^(.*?);(.*);(.*?);(.*?)$',
                       '\\1 \\2 \\3 \\4', rl),
           quote = '', header = TRUE, stringsAsFactors = FALSE)