如何检查.csv-File是否有逗号或分号作为分隔符?

时间:2015-10-29 14:39:09

标签: r csv

正如标题所说:

我必须自动阅读很多.csv文件。 有些人使用逗号作为分隔符,然后我接受命令read.csv()。

有些分号作为分隔符,然后我使用read.csv2()。

我想编写一段代码来识别.csv-File是否有逗号或分号作为分隔符(在我阅读之前),这样我就不必每次都更改代码。 我的方法是这样的:

try to read.csv("xyz")
if error 
read.csv2("xyz")

这样的事情可能吗? 有人曾经这样做过吗? 如何在没有实际看到错误的情况下检查是否有错误?

我希望问题很清楚。 对不起我的英文

提前致谢

2 个答案:

答案 0 :(得分:8)

以下几种方法假设文件格式的唯一区别在于分隔符是分号,小数是逗号还是分隔符是逗号而小数是一个点。

1)fread 正如在data.table包中的评论fread中所提到的,包将自动检测公共分隔符的分隔符,然后使用它检测到的分隔符读取文件。这还可以处理格式中的某些其他更改,例如自动检测文件是否具有标题。

2)grepl 查看第一行并查看它是否有逗号或分号,然后重新读取该文件:

L <- readLines("myfile", n = 1)
if (grepl(";", L)) read.csv2("myfile") else read.csv("myfile")

3)count.fields 如果我们可以假设每个文件中存在多个字段,那么当sep =“;”时有一个字段我们知道分号不是分隔符。

L <- readLines("myfile", n = 1)
numfields <- count.fields(textConnection(L), sep = ";")
if (numfields == 1) read.csv("myfile") else read.csv2("myfile")

更新已添加(3)并对所有三项进行了改进。

答案 1 :(得分:3)

谨慎一点。 read.csv2()用于将逗号作为小数点处理,分号作为分隔符处理(默认值)。如果有任何机会,你的csv文件有分号作为分隔符并且指向小数点,你可能会因为dec =&#34;,&#34;而出现问题。设置。如果是这种情况,并且您确实将分隔符作为文件之间的唯一区别,则最好更改&#34; sep&#34;选项直接使用read.table()