data.table fread NA

时间:2018-05-12 17:19:50

标签: r data.table fread

我有一个很大的csv,我正在阅读。直到最近,na字符串可能包括“F”我更新到最新版本,不再允许。如何在数字字段中使用F处理记录?这与加拿大统计局的数据非常相似。使用r 3.5和数据表版本1.11.2可以找到问题。数据表版本1.10.4.3不反对NA字符串中的“F”。

这是一个示例文件

2010/01,Newfoundland and Labrador ,,二手车经销商,“Unadjusted(x 1,000)”,v52367418,2.5.1,F 2010/02,纽芬兰和拉布拉多,二手车经销商,“Unadjusted(x 1,000)”,v52367418,2.5.1,F 2010/03,纽芬兰和拉布拉多,二手车经销商,“Unadjusted(x 1,000)”,v52367418,2.5.1,F 2010/04,纽芬兰和拉布拉多,二手车经销商,“Unadjusted(x 1,000)”,v52367418,2.5.1,F 2010/05,纽芬兰和拉布拉多,二手车经销商,“Unadjusted(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.

1 个答案:

答案 0 :(得分:2)

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

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<body>
<div>
  <p>Hello World</p><button>Change color</button>
</div>
<br><br><br><br><br><br>
<div class="foo">FOOOO</div>
</body>

让我

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