【问题标题】:How to read when delimiter is space and missing values are blank?分隔符为空格且缺失值为空白时如何读取?
【发布时间】:2018-06-21 06:16:51
【问题描述】:

我有一个空格分隔的文件,有些列是空白的,所以我们最终有多个空格,fread 失败并出现错误。但是 read.table 工作正常。见例子:

library(data.table)
# R version 3.4.2 (2017-09-28)
# data.table_1.10.4-3

fread("A B C D
1 2  3
4 5 6 7", sep = " ", header = TRUE)
Error in fread("A B C D\n1 2  3\n4 5 6 7") : 
  Expected sep (' ') but new line, EOF (or other non printing character) ends field 2 when detecting types from point 0: 1 2  3
read.table(text ="A B C D
1 2  3
4 5 6 7", sep = " ", header = TRUE)
#   A B  C D
# 1 1 2 NA 3
# 2 4 5  6 7

我们如何使用 fread 进行阅读,我尝试设置 sep = " "na.string = "",没有帮助。

【问题讨论】:

    标签: r data.table delimiter fread


    【解决方案1】:

    fread 函数中,默认strip.white 设置为TRUE,意味着去除了前导尾随空格。这对于使用fixed widthirregular number of spaces 作为分隔符读取文件很有用。

    而在 read.table 中,strip.white 默认设置为 FALSE

    fread("A B C D
    1 2  3
    4 5 6 7", sep = " ", header = TRUE, strip.white = FALSE)
    #    A B  C D
    # 1: 1 2 NA 3
    # 2: 4 5  6 7
    

    注意:由于我找不到相关帖子而提供自我回答,这也让我绊倒了oncetwice


    编辑:这不再适用于 data.table_1.12.2, related GitHub Issue

    【讨论】:

    • 从提问到自我回答一分钟?
    • @snoram 是encouraged,另外,主要是我发帖以供自己将来参考,因为我可能会再次忘记:)
    • 不错。然后+1。我想每个使用fread() 的人都应该注意了。
    • 我遇到了一个类似的问题,主要区别是在某些行中最后一列丢失了。除了您的解决方案fill = TRUE 之外,还需要。
    • 在找到您的问题之前,我发布了相同的问题 stackoverflow.com/questions/65646742/…。我使用 sed 添加了一个解决方案。
    猜你喜欢
    • 2016-05-24
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多