r - fread() Blank.lines.skips 离开 NA 行

标签 r fread read.csv

我在 csv 文件中的每月数据 block 之间有空行。我研究了使用 fread 或 read.csv 的 blank.line.skips = TRUE 参数来删除这些空行。

但是我得到的是一条末尾带有 NA 的行。 为什么该行没有完全删除?

我确实看到了一些关于 fread 在有空白行时崩溃的旧数据答案,但这似乎已得到修复。

测试用例

temp <- data.table(a = c("a","","c","d"), 
                   b = c(10,"",30,40))

fwrite (temp, "test.csv")



mydata <- fread("test.csv", 
                blank.lines.skip = TRUE,
                stringsAsFactors = FALSE)

结果

我得到第二行,该行是空白的,并添加了 NA:

> mydata
a  b
1: a 10
2:   NA
3: c 30
4: d 40

我想要(并且期望):

> mydata
a  b
1: a 10
2: c 30
3: d 40

(我意识到我可以通过 mydata[complete.cases(mydata), ] 获得此结果,但我希望 blank.lines.skips 能够做到这一点。来自fread help “如果输入中的 TRUE 空白行被忽略。”)

这个 fread 是否会导致该行出现错误或功能?

最佳答案

当您执行fwrite (temp, "test.csv")时,第二行(不考虑标题)不是空白...它有一个分隔符:

a,b
a,10
,
c,30
d,40

参数blank.lines.skips适用于真正的空白行:

例如:test.csv如下

a,b
a,10

c,30
d,40

控制:

> dim(fread("test.csv", blank.lines.skip = TRUE))
[1] 3 2

参数blank.lines.skip = TRUE避免在第一个空行处停止。如果不设置此参数,您将拥有:

> dim(fread("test.csv"))
[1] 1 2
Warning message:
In fread("test.csv") :
  Stopped reading at empty line 3 but text exists afterwards (discarded): c,30

编辑:

要解决空行问题,我建议:

  • 如果您的文件中有很多这样的行,请在读取数据之前将其从文件中删除。
  • 如果您只有其中几个,请在阅读后将其删除。

关于r - fread() Blank.lines.skips 离开 NA 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47351062/

相关文章:

r - 如何在泰勒图中标记点?

R 中的 read.csv 阅读日期不同

r - 文件中的错误(文件, "rt"): cannot open the connection - cannot open file 'specdata' access denied

c - 如何以动态排列的结构加载二进制文件的信息?

R 在导入时将字符附加到 CSV 文件

python - 使用 python 获取 django 模型中字段的 "unique item"

r - 如何在选项卡上获得 Shiny 的通知图标

r - 如何将一串不同长度的数字和字母分成R中的不同列?

c - 使用 fread 读取文件不会按预期结束

c - Fread - 大量整数