有什么方法可以强制fread()的data.table不要停在空行上?

时间:2013-11-10 20:57:55

标签: r data.table

(问题已不再相关,因为25-NOV-2016 data.table的新版本 - 见下面接受的答案)

所以,我有一张桌子,中间有一些空行。当我尝试使用fread打开它时,它会停止,说Stopped reading at empty line 10006, but text exists afterwards (discarded)。有没有办法在不更改数据文件的情况下避免这种情况?

3 个答案:

答案 0 :(得分:8)

2016年11月25日发布的

Version 1.9.8 of data.table有一个新的blank.lines.skip选项可以跳过空行。

text <- "1,a\n\n2,b\n3,c\n4,a\n\n5,b\n\n6,c"

library(data.table)
fread(text)
##    V1 V2
## 1:  2  b
## 2:  3  c
## 3:  4  a
## Warning message:
## In fread("1,a\n\n2,b\n3,c\n4,a\n\n5,b\n\n6,c") :
##   Stopped reading at empty line 6 but text exists afterwards (discarded): 5,b

fread(text, blank.lines.skip=TRUE)
##    V1 V2
## 1:  1  a
## 2:  2  b
## 3:  3  c
## 4:  4  a
## 5:  5  b
## 6:  6  c

答案 1 :(得分:5)

您可以使用Windows findstr命令删除空行。

示例文件“Data.txt”。

1,a

2,b
3,c
4,a


5,b

6,c

重现您的错误。

> dt <- fread("Data.txt")
Warning message:
In fread("Data.txt") :
Stopped reading at empty line 6 of file, but text exists afterwards (discarded): 5,b

但直接在findstr中使用Windows fread时可以使用。

> require(data.table)
> dt <- fread('findstr "." Data.txt')

# > dt
#    V1 V2
# 1:  1  a
# 2:  2  b
# 3:  3  c
# 4:  4  a
# 5:  5  b
# 6:  6  c

答案 2 :(得分:2)

如果其他人遇到类似的问题,我注意到data.table 1.10.4(我正在使用的当前2017版本)似乎会产生一些文件的空行错误,如果你没有明确说明:

'strip.white = FALSE'

我正在查看我尝试导入的~350个文件中明显的行错误。有些行被打破了原始的两行,由于它们包含不同形式的信息,因此fread警告某些列的类强制问题。但我同时在几乎所有文件中都会出现“空行”错误。我在notepad ++中手动检查了那些。多次。没有空行,还有剩余的行;其中很多。尝试通过导入参数并禁用特别是strip.white删除了空行警告。