数据表::fread不';我不喜欢第一列中缺少值
这是数据表::fread不';我不喜欢第一列中缺少值,r,data.table,R,Data.table,这是data.table::fread(1.9.2版)中的错误还是用户期望值/错误放错了位置 考虑这个简单的例子,我有一个值表,TAB,用可能缺少的值分隔。如果第一列中缺少值,fread会被打乱,但如果缺少值在别处,我将返回数据。表我希望: # Data with missing value in first column, third row and last column, second row: 12 876 19 23 39 15 20 fread("12 876
data.table::fread
(1.9.2版)中的错误还是用户期望值/错误放错了位置
考虑这个简单的例子,我有一个值表,TAB
,用可能缺少的值分隔。如果第一列中缺少值,fread
会被打乱,但如果缺少值在别处,我将返回数据。表
我希望:
# 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.
这是一个错误还是第一列中不可能有缺失的值(或者我是否有格式错误的数据?)。我相信这是我报告的同一个错误 我所知道的最新版本将使用这种类型的输入是Rev。1180您可以通过在
svn checkout
命令的末尾添加@1180
来签出并构建该版本
svn checkout svn://svn.r-forge.r-project.org/svnroot/datatable/@1180
如果您不熟悉签出和构建包
但是自Rev。1180(撰写本文时的开发版本为版本1272)。因此,更好的解决方案是将R/fread.R
和src/fread.c
文件替换为Rev。1180或更高版本,然后重新构建包
您无需在此处签出即可在线找到这些文件(抱歉,我不知道如何发布包含“*”的链接,因此您必须复制/粘贴):
弗里德·R:http://r-forge.r-project.org/scm/viewvc.php/*签出*/pkg/R/fread.R?修订版=988&root=datatable
弗瑞德c:http://r-forge.r-project.org/scm/viewvc.php/*签出*/pkg/src/fread.c?修订版=1159&root=datatable
重建包后,您将能够读取tsv文件
> 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
这样做的缺点是旧版本的“代码> Frad())/>代码不通过一个新的测试——你将无法读取中间有引号的字段。
> 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
,您将获得
> fread('A,B,C\n1.2,Foo"Bar,"a"b\"c"d"\nfo"o,bar,"b,az""\n')
A B C
1: 1.2 Foo"Bar a"b"c"d
2: fo"o bar b,az"
因此,目前,哪个版本“有效”取决于您是否更可能在第一列中缺少值,或者在字段中使用引号。对我来说,它是前者,所以我仍然使用旧代码。replicate of@GSee我不认为它是重复的-相同的错误消息,但我没有看到该问题中缺少的值。我注意到阿南达提出的解决方案在这种情况下也不起作用。但是很好的链接到相关的r-forge问题,谢谢!现在。。。如何查看版本1180。。。。。?!将
@1180
添加到命令的末尾:svn checkoutsvn://svn.r-forge.r-project.org/svnroot/datatable/@1180