R:用不同的小数点分隔符读取多个文件

R: fread multiple files with different decimal seperators

当通过 fread 读取 csv 文件并使用 colClasses 将列读取为数字时,我在处理由带逗号而不是点的数字组成的数据时遇到了问题。由于数据文件来源不同,有的使用“.”。还有一些使用“,”作为小数点分隔符

dt <- data.table(a=c("1,4","2,0","4,5","3,5","6,9"),c=(10:14))
write.csv(dt,"dt.csv",row.names=F)
dcsv <- fread("dt.csv", colClasses = list(numeric = 1:2), dec = ",").

我有两个问题: 我想将两列都读作数字。所以我尝试使用 dec = ","。我现在得到一个 error: Column number 2 (colClasses[[1]][2]) is out of range [1,ncol=1] 所以我改成了colClasses = list(numeric = 1),但是不太明白这个。

仍然是第一列是字符类型而不是数字。

我怎么能同时将 dec 更改为 .,,因为我事先不知道数百个文件中的任何一个使用什么类型的小数点分隔符。我尝试了一个向量,但没有成功。我错过了什么?感谢您的帮助!

一个文件有两种不同类型的数字分隔符是不正常的。

你应该首先质疑文件的来源。

不过,如果您有这样的文件,正确的读取方法是将带有逗号分隔符的变量作为字符串,然后将其转换为数字。

library(data.table)

dt <- data.table(a=c("1,4","2,0","4,5","3,5","6,9"),c=(10:14))
write.csv(dt,"dt.csv",row.names=F)
dcsv <- fread("dt.csv", dec = ".")
dcsv[, a:= as.numeric(gsub("\"", "", gsub(",", ".", a)))]

如果您不知道您的变量是带逗号还是点分隔符,您可以遍历您的变量以测试该变量是否是仅包含数字和逗号的字符串,并仅转换满足该条件的字符串.