我有一个很大的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()函数时,我得到了以下错误:
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.
发布于 2018-05-12 18:12:42
我只需要对输入进行预处理,或者对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>
https://stackoverflow.com/questions/50308868
复制相似问题