首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当将某些colClasses设置为整数时,read.table在看到引号字段值时会发出抱怨。

当将某些colClasses设置为整数时,read.table在看到引号字段值时会发出抱怨。
EN

Stack Overflow用户
提问于 2015-09-23 16:08:32
回答 1查看 1.3K关注 0票数 2

我是通过使用借贷俱乐部的历史贷款数据来学习R的。这里有代表性的数据子集:https://gist.github.com/adetch/11b1c2b6eac0b6add23f

有关命令:

代码语言:javascript
复制
problem <- read.csv("test.csv",na.strings=c("","<NA>"),colClasses=c("mths_since_last_major_derog"="integer"))

我碰到的错误是:

代码语言:javascript
复制
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
scan() expected 'an integer', got '""'

我在下面的命令中遇到了类似的问题:

代码语言:javascript
复制
problem <- read.csv("test.csv",na.strings=c("","<NA>"),colClasses=c("id"="integer"))

本例中的错误:

代码语言:javascript
复制
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
scan() expected 'an integer', got '"1077501"'

所以在我看来

  • Rinteger类与引号不兼容。
  • 而且可能是na.strings转换在类扫描之后运行,而integer检查在空字符串上失败。

但是,包装在""中的其他列(如member_idloan_amnt )可以在没有抱怨的情况下转换为integer (也没有使用colClasses!进行任何特殊干预)。

最接近的问题是:

  • 如何将这些字段(idmths_since_last_major_derog)转换为整数,而不是因子(注意还有许多其他字段应该转换为因子)

更重要的是:

  • 我的R类、类强制、read.table/read.csv等心理模型在哪里崩溃?
EN

回答 1

Stack Overflow用户

发布于 2015-09-23 16:18:08

不要使用colClasses。如果你真的需要胁迫,那就按原样读一下,然后再读use$id <- as.integer(problem$id)

但在这种情况下(您的test.csv),我认为R非常擅长加载数据。

编辑

只是为了重来一次。假设有一个包含3列的简单数据表:

代码语言:javascript
复制
id,member_id,term
1077501,1296599,36 months
1077430,1314167,60 months
1077175,1313524,36 months
1076863,1277178,36 months

如果您通过

代码语言:javascript
复制
d <- read.csv("c:/temp/R/data.csv")

然后R将尽力匹配数据类型。如果你真的想预先告诉它,使用colClasses;如果你说的话

代码语言:javascript
复制
d <- read.csv("c:/temp/R/data.csv", colClasses = c("integer"))

然后,它将尝试对每个列使用类integer,因为它重复了colClasses向量。

同样的问题

代码语言:javascript
复制
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中,这将起到作用:(也就是说,您需要转义",实际的字符串将是"\"\"")。

代码语言:javascript
复制
problem <- read.csv("c:/temp/R/test.csv",na.strings=c("\"\"","","<NA>"),colClasses=c("mths_since_last_major_derog"="integer"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32744474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档