我是通过使用借贷俱乐部的历史贷款数据来学习R的。这里有代表性的数据子集:https://gist.github.com/adetch/11b1c2b6eac0b6add23f
有关命令:
problem <- read.csv("test.csv",na.strings=c("","<NA>"),colClasses=c("mths_since_last_major_derog"="integer"))我碰到的错误是:
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
scan() expected 'an integer', got '""'我在下面的命令中遇到了类似的问题:
problem <- read.csv("test.csv",na.strings=c("","<NA>"),colClasses=c("id"="integer"))本例中的错误:
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
scan() expected 'an integer', got '"1077501"'所以在我看来
R的integer类与引号不兼容。na.strings转换在类扫描之后运行,而integer检查在空字符串上失败。但是,包装在""中的其他列(如member_id和loan_amnt )可以在没有抱怨的情况下转换为integer (也没有使用colClasses!进行任何特殊干预)。
最接近的问题是:
id、mths_since_last_major_derog)转换为整数,而不是因子(注意还有许多其他字段应该转换为因子)更重要的是:
R类、类强制、read.table/read.csv等心理模型在哪里崩溃?发布于 2015-09-23 16:18:08
不要使用colClasses。如果你真的需要胁迫,那就按原样读一下,然后再读use$id <- as.integer(problem$id)。
但在这种情况下(您的test.csv),我认为R非常擅长加载数据。
编辑
只是为了重来一次。假设有一个包含3列的简单数据表:
id,member_id,term
1077501,1296599,36 months
1077430,1314167,60 months
1077175,1313524,36 months
1076863,1277178,36 months如果您通过
d <- read.csv("c:/temp/R/data.csv")然后R将尽力匹配数据类型。如果你真的想预先告诉它,使用colClasses;如果你说的话
d <- read.csv("c:/temp/R/data.csv", colClasses = c("integer"))然后,它将尝试对每个列使用类integer,因为它重复了colClasses向量。
同样的问题
d <- read.csv("c:/temp/R/data.csv", colClasses = c("integer","character"))尝试以colClasses[1]的形式加载第一列,即整数- OK。
尝试将第二列加载为colClasses[2],即字符- OK。
尝试加载第三列,因为没有colClasses[3],所以它回收colClasses并返回到colClasses[1] --这是行不通的(R不知道如何将“36个月”强制转换为整数值)。
EDIT2
AFter实际上查看了数据集,问题是您的列没有任何值,只存储""。因此,您需要将""添加到您的na.string中,这将起到作用:(也就是说,您需要转义",实际的字符串将是"\"\"")。
problem <- read.csv("c:/temp/R/test.csv",na.strings=c("\"\"","","<NA>"),colClasses=c("mths_since_last_major_derog"="integer"))https://stackoverflow.com/questions/32744474
复制相似问题