读取R中的csv数据文件

问题描述 投票:0回答:1

我正在使用read.table读取数据文件。并出现以下错误:

scan(文件,什么,nmax,sep,dec,引用,跳过,nlines,na.strings,scan()预期为“真实”,为“ 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")
                   );
r read.csv import-from-csv
1个回答
3
投票

您得到的错误是由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实际上是否有效,或者那里是否存在数据问题。

大多数情况下,您可以通过这种方式缩小问题范围。

但是,如果您的文件有很多列,这很快就变得很繁琐。...

© www.soinside.com 2019 - 2024. All rights reserved.