我使用Lending Club的历史贷款数据集来学习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
&#39; integer
类与引号不兼容na.strings
转换,并且integer
检查在空字符串上失败。但是,""
中包含的其他列(例如member_id
和loan_amnt
)会在没有投诉的情况下被投射为integer
(并且没有使用colClasses
进行任何特殊干预!)。
最近的问题:
id
,mths_since_last_major_derog
)转换为整数,而不是因子(注意 应该将其作为因素投射的众多其他字段)< / LI>
更重要的是:
R
类的心理模型,类胁迫,read.table / read.csv等在哪里崩溃?答案 0 :(得分:0)
请勿使用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]
,即整数 - 确定。
尝试将第二列加载为colClasses[2]
,即字符 - 确定。
尝试加载第3列 - 因为没有colClasses[3]
然后回收 colClasses
并返回colClasses[1]
- 这不起作用(R不知道如何将“36个月”强制为整数值)
<强> EDIT2 强>
在实际查看数据集之后,问题是您的列没有任何值,并且仅存储""
。
因此,您需要将""
添加到na.string
,这样才能解决问题:
(即你需要逃避"
,你的实际字符串将是"\"\""
)
problem <- read.csv("c:/temp/R/test.csv",na.strings=c("\"\"","","<NA>"),colClasses=c("mths_since_last_major_derog"="integer"))