如何用EOF解决fread txt的问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用EOF解决fread txt的问题?相关的知识,希望对你有一定的参考价值。

我正在尝试阅读ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt的气候站信息。但是,由于第一行未完全填充(缺少最后两个cols)并且第5列包含空格,因此我无法完成阅读:

fread('ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt',sep=)

它返回错误消息:

 Expected sep (' ') but new line, EOF (or other non printing character) ends 
 field 5 when detecting types from point 0: AGE00135039  35.7297    0.6500   
 50.0    ORAN-HOPITAL MILITAIRE     

如何在阅读此txt文件时正确应用fread?谢谢!

答案

你为什么不试试utils包中的read.fwf函数?列宽在readme.txt文件中给出(参见第IV节)。

IV. FORMAT OF "ghcnd-stations.txt"

------------------------------
Variable   Columns   Type
------------------------------
ID            1-11   Character
LATITUDE     13-20   Real
LONGITUDE    22-30   Real
ELEVATION    32-37   Real
STATE        39-40   Character
NAME         42-71   Character
GSN FLAG     73-75   Character
HCN/CRN FLAG 77-79   Character
WMO ID       81-85   Character
------------------------------

但是,以下尝试返回错误:

data <- read.fwf("ghcnd-stations.txt", widths = c(11,9,10,7,3,31,4,4,6))
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  : 
  line 25383 did not have 7 elements

对第25,383行的检查揭示了错误的原因。

> x <- readLines("ghcnd-stations.txt", 25383)
> tail(x, 1)
[1] "CA002100627  60.8167 -137.7333  846.0 YT HAINES APPS #4                              "

因此,通过包含comment.char参数来绕过这一点,将值从默认值(#)更改为其他值,可能只是null。

data <- read.fwf("ghcnd-stations.txt", widths = c(11,9,10,7,3,31,4,4,6), comment.char="")

它只需要大约20秒。没有真正需要fread

以上是关于如何用EOF解决fread txt的问题?的主要内容,如果未能解决你的问题,请参考以下文章

如何用 ViewPager 中的另一个片段替换 Android 片段?

为啥 fread 循环需要额外的 Ctrl+D 来用 glibc 发出 EOF 信号?

如何用Linux解决这个问题呢? [关闭]

如何用JS实现一行一行读取一个TXT文件?

RocketMQ - 如何用死信队列解决消费者异常

我使用 fread 在 BMP 上读取分段错误信息头。请问我该如何解决?