我必须自动读取大量 CSV 文件。有些有逗号作为分隔符,然后我使用命令read.csv()
.
有些有分号作为分隔符,那我用read.csv2()
.
我想编写一段代码来识别 CSV 文件是否有逗号或分号作为分隔符(在我阅读之前),这样我就不必每次都更改代码。
我的方法是这样的:
try to read.csv("xyz")
if error
read.csv2("xyz")
这样的事情可能吗?以前有人这样做过吗?如何在没有实际看到的情况下检查是否有错误?
最佳答案
这里有几种方法,假设文件格式之间的唯一区别是分隔符是分号,小数点是逗号,还是分隔符是逗号,小数点是点。
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 我们可以假设分号,然后计算第一行中的字段。如果有一个字段,则以逗号分隔,如果没有,则以分号分隔。L <- readLines("myfile", n = 1)
numfields <- count.fields(textConnection(L), sep = ";")
if (numfields == 1) read.csv("myfile") else read.csv2("myfile")
更新 添加 (3) 并对所有三个进行了改进。
关于r - 如何检查 CSV 文件是否有逗号或分号作为分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33417242/