我正在使用read.table来读取数据文件。并得到以下错误:
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
scan() expected 'a real', got 'true'
我知道这意味着我的数据文件中存在一些错误,问题是如何找到它的位置。错误消息没有告诉哪一行有问题,我很难找到它。或者我该如何跳过这些行?感谢。
这是我的R代码:
data<-read.csv("/home/jianfezhang/prod/conversion_yaap/data/part-r-00000",
sep="\t",
col.names=c("site",
"treatment",
"mode",
"segment",
"source",
"itemId",
"leaf_categ_id",
"condition_id",
"auct_type_code",
"start_price_lstg_curncy",
"bin_price_lstg_curncy",
"start_price_variance",
"start_price_mean",
"start_price_media",
"bin_price_variance",
"bin_price_mean",
"bin_price_media",
"is_sold"),
colClasses=c(rep("factor",5),"numeric",rep("factor",3),rep("numeric",8),"factor")
);
答案 0 :(得分:2)
您得到的错误是由colClasses
参数引起的 - 文件中的某些值与您指定的数据类型不匹配。
大多数时候我遇到类似这样的事情,我可能只是对colClasses
参数有一些计数问题,例如它可能是
colClasses=c(rep("factor",5),"numeric", rep("factor",4), rep("numeric",7),"factor")
而不是默认值。 可以通过仔细比较文件的第一行的内容与您指定的数据类型来检查。
如果这不适合你,你可能有一些错误的数据类型,你不期望它。一种简单而缓慢的方法是删除colClasses
参数并首先读取整个文件而不使用特定选项 - 可能添加stringsAsFactors=FALSE
以仅获取字符值。这可能应该有效。
然后您可以尝试逐个转换每个列,例如
data$itemId <- as.numeric(data$itemId)
然后检查NA
值的结果,由summary(data$itemId)
轻松完成。如果您获得了NA
个值,则可以调用which(is.na(data$itemId))
来获取行号并检查原始文件NA
实际上是否有效,或者您是否有一些数据问题。
大多数情况下,您可以通过这种方式缩小问题范围。
但是,如果您的文件很多,那么这很快就会成为很多工作....