首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >data.table fread NA中不再允许使用"F“

data.table fread NA中不再允许使用"F“
EN

Stack Overflow用户
提问于 2018-05-12 17:19:50
回答 1查看 132关注 0票数 1

我有一个很大的csv,我正在和fread一起阅读。直到最近,na字符串可以包含"F“我更新到最新的版本,这是不再允许的。如何处理数值字段中包含F的记录?这在加拿大统计局的数据中非常常见。将r3.5与数据表版本1.11.2一起使用时会发现该问题。数据表版本1.10.4.3不反对NA字符串中的"F“。

下面是一个示例文件

2010/01,纽芬兰和拉布拉多,二手车经销商,“未调整(x 1,000)",v52367418,2.5.1,F 2010/02,纽芬兰和拉布拉多,二手车经销商,”未调整(x 1,000)",v52367418,2.5.1,F 2010/03,纽芬兰和拉布拉多,二手车经销商,“未调整(x 1,000)",v52367418,2.5.1,F 2010/04,纽芬兰和拉布拉多,二手车经销商,”未调整(x 1,000)",v52367418,2.5.1,F 2010/05,纽芬兰和拉布拉多,二手车经销商,“未调整(x 1,000)",v52367418,2.5.1,11466.0

当我试图在这个文件上使用fread()函数时,我得到了以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 library(data.table)
 dt <- fread("data.csv", na.strings=c('F'))
#Error in fread("data.csv", na.strings = c("F")) :
#  freadMain: NAstring <<F>> is recognized as type boolean, this is not permitted.
EN

回答 1

Stack Overflow用户

发布于 2018-05-12 18:12:42

我只需要对输入进行预处理,或者对data.table进行后处理。对于您的示例数据,下面是第二种方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dt <- fread(txt)   ## with txt being your input data

dt[V8 != "F", V8new := as.numeric(V8)]   # convert numeric
dt[V8 == "F", V8new := NA]               # flag rest as NA
dt[, V8 := NULL]                         # delete old column
setnames(dt, "V8new", "V8")              # rename

dt

这让我明白了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
R> dt[, 4:8]   ## more compact display
                 V4                   V5        V6    V7    V8
1: Used car dealers Unadjusted (x 1,000) v52367418 2.5.1    NA
2: Used car dealers Unadjusted (x 1,000) v52367418 2.5.1    NA
3: Used car dealers Unadjusted (x 1,000) v52367418 2.5.1    NA
4: Used car dealers Unadjusted (x 1,000) v52367418 2.5.1    NA
5: Used car dealers Unadjusted (x 1,000) v52367418 2.5.1 11466
R> 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50308868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文