data.table :: fread不喜欢第一列中的缺失值

时间:2014-05-23 15:37:28

标签: r data.table

这是data.table::fread(版本1.9.2)中的错误还是错误的用户期望/错误?

考虑这个简单的例子,我有一个值表,TAB,可能缺少值。如果第一列中缺少值,fread会感到沮丧,但如果其他地方缺少值,则会返回我期望的data.table

# Data with missing value in first column, third row and last column, second row:
12  876 19
23  39  
    15  20

fread("12   876 19
23  39  
    15  20")
#Error in fread("12\t876\t19\n23\t39\t\n\t15\t20") : 
#  Not positioned correctly after testing format of header row. ch='    '

# Data with missing values last column, rows two and three: 
"12 876 19
23  39  
15  20  "

fread( "12  876 19
23  39  
15  20  " )
#   V1  V2 V3
#1: 12 876 19
#2: 23  39 NA
#3: 15  20 NA
# Returns as expected.

这是一个错误还是第一列中不可能有缺失的值(或者我的数据是否有错误?)。

1 个答案:

答案 0 :(得分:2)

我认为这与我报告的here相同。

我知道最新版本将使用此类输入版本是Rev. 1180.您可以结帐并通过将@1180添加到{{{}的末尾来构建该版本1}}命令。

svn checkout

如果您不熟悉签出和构建包,see here

但是,自Rev. 1180以来已经实施了许多强大的功能,错误修复和增强功能。(撰写本文时的发展版本是Rev. 1272)。因此,更好的解决方案是使用Rev. 1180或更早版本中的版本替换svn checkout svn://svn.r-forge.r-project.org/svnroot/datatable/@1180 R/fread.R文件,然后重新构建软件包。

你可以在网上找到这些文件而不在这里查看(抱歉,我无法弄清楚如何发布包含'*'的链接,所以你必须复制/粘贴):

fread.R:
src/fread.c

fread.c:
http://r-forge.r-project.org/scm/viewvc.php/*checkout*/pkg/R/fread.R?revision=988&root=datatable

重建软件包后,您将能够读取您的tsv文件。

http://r-forge.r-project.org/scm/viewvc.php/*checkout*/pkg/src/fread.c?revision=1159&root=datatable

这样做的缺点是旧版> fread("12\t876\t19\n23\t39\t\n\t15\t20") V1 V2 V3 1: 12 876 19 2: 23 39 NA 3: NA 15 20 没有通过更新的测试 - 你将无法读取中间带引号的字段。

fread()

使用较新版本的> fread('A,B,C\n1.2,Foo"Bar,"a"b\"c"d"\nfo"o,bar,"b,az""\n') Error in fread("A,B,C\n1.2,Foo\"Bar,\"a\"b\"c\"d\"\nfo\"o,bar,\"b,az\"\"\n") : Not positioned correctly after testing format of header row. ch=',' ,您可以获得此

fread

因此,目前,哪个版本“有效”取决于您是否更有可能在第一列中丢失值,或者在字段中引用。对我来说,它是前者,所以我仍在使用旧代码。