正如标题所说:
我必须自动阅读很多.csv文件。 有些人使用逗号作为分隔符,然后我接受命令read.csv()。
有些分号作为分隔符,然后我使用read.csv2()。
我想编写一段代码来识别.csv-File是否有逗号或分号作为分隔符(在我阅读之前),这样我就不必每次都更改代码。 我的方法是这样的:
try to read.csv("xyz")
if error
read.csv2("xyz")
这样的事情可能吗? 有人曾经这样做过吗? 如何在没有实际看到错误的情况下检查是否有错误?
我希望问题很清楚。 对不起我的英文
提前致谢
答案 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()