使用data.table :: fread无法正确读取数据

时间:2016-04-29 07:44:18

标签: r data.table fread

fread("Dummy data.CSV", sep = "~")

  

Bumped column 22在数据行19257上键入字符,字段包含   '不适用'。在此列中强制先前读取的值   逻辑,整数或数字返回到可能不是的字符   无损;例如,如果' 00'和' 000'发生在他们现在之前   只是' 0',并且可能存在与','的处理不一致的问题。和   ',NA,'也是(如果它们发生在碰撞前的这一列中)。如果这   重要的是请重新运行并设置“colClasses'到了角色'为了这   柱。请注意,列类型检测使用前5行,   中间5行和最后5行,所以希望这条消息   应该是非常罕见的。如果向datatable-help报告,请重新运行   包括verbose = TRUE的输出。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

这不是错误,而是警告。 fread查看文件的开头,中间和结尾以猜测列的数据类型。然后,当读取整个文件时,它可能碰到不符合先前确定的数据类型的值。在你的情况下,第22列已被猜测为逻辑,整数或数字,但它包含字符串" NOT APPLICABLE"。因此整个专栏变成了字符类型。 fread警告您数据类型可能不是您通常期望的那些。

答案 1 :(得分:1)

实际上,这可能也是一个答案。

@ paljenczy的答案完美地解释了为什么你收到了警告,然后你可以使用na.strings = c("NA", "NOT APPLICABLE")将这个字段变为NA,如果这是可以接受的话。如果没有,请添加colClasses = list(character = 22)以将整个列作为字符读取,然后按照您想要的方式处理它。

编辑:只有一条评论关于设置这个"不适用"价值为NA。这可能不是一个好主意,因为不适用的是您将使用NA或将整列投放到logicalintegernumeric的信息。我的方法是创建一个新的二进制列,它将说明第22列中的相应值是作为数字给出还是"不适用"然后将整个列22转换为您想要的任何格式。