r - data.table fread NA 中不再允许“F”
问题描述
我有一个很大的 csv,我正在用 fread 阅读。直到最近,na 字符串可能包括“F”我更新到最新版本,这不再被允许。如何处理数字字段中带有 F 的记录?这在加拿大统计局的数据中很常见。使用带有数据表版本 1.11.2 的 r 3.5 发现问题。数据表版本 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() 函数时,出现以下错误:
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.
解决方案
我只会对输入进行预处理,或者对 data.table 进行后处理。对于您的示例数据,这是第二种方法:
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
这让我
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>
推荐阅读
- javascript - 我们如何使用茉莉花模拟私有方法?
- react-native - 我如何通过贝宝在 React Native 中实现汇款?
- typescript - Typescript: How type a function using generic type in this case?
- sql-server - 如何更改 SQL Server 2016 中现有内存优化表的 DURABILITY 选项?
- c++ - LAPACK 函数在第一次迭代后变慢
- android - 后按时关闭活动而不是 popBackStack()
- xml - 如何在不转换 html 编码的情况下转换配置文件
- google-app-maker - 是否可以在应用程序制造商中创建输入小部件?或者如何用数字进行多选?
- ios - SwiftUI 口音颜色变化
- mysql - 如何使用 group by 修复我的 mysql 请求?