R:通过fread
读取csv文件并使用colClasses
读取列作为数字时遇到由逗号而不是点组成的数据时出现问题的问题
问题描述:
R:使用不同小数点分隔符的多个文件。由于数据文件有不同的起源,有些使用“。”有的使用“”作为小数点分隔R:通过<code>fread</code>读取csv文件并使用<code>colClasses</code>读取列作为数字时遇到由逗号而不是点组成的数据时出现问题的问题
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 = ",").
我有2个问题: 我想作为NUMERICS读两列。所以我尝试使用dec = ","
。我现在得到一个error: Column number 2 (colClasses[[1]][2]) is out of range [1,ncol=1]
所以我改为colClasses = list(numeric = 1)
,但不太明白这一点。
仍然第一列原来是字符类型而不是数字。
我怎么也可以将dec
改为.
和,
,因为我事先不知道数百个文件中使用的是什么类型的小数点分隔符。我尝试了一个矢量,但没有成功。我错过了什么?谢谢你的帮助!
答
使用2种不同类型的数字分隔符创建文件是不正常的。
您应该首先询问文件的来源。然而,如果你有这样一个文件,正确的读取方式是用逗号分隔符作为字符串的变量,然后将其转换为数字。
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)))]
如果你不知道你的变量是用逗号或圆点分隔符,你可以遍历您的变量来测试变量是否只数和逗号串并转换只有那些满足该条件。
我没有清楚表达自己,对此表示遗憾。我的意思是不同类型的数字分隔符在不同的文件中,我想通过'fread'读入。所以file1使用'.',file2使用'''等等。谢谢你的回答! – Rivka