本文介绍了读取固定宽度的文本文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将这个格式难看的数据集加载到我的 R 会话中:http://www.cpc.ncep.noaa.gov/data/indices/wksst8110.for

I'm trying to load this ugly-formatted data-set into my R session:http://www.cpc.ncep.noaa.gov/data/indices/wksst8110.for

Weekly SST data starts week centered on 3Jan1990

Nino1+2      Nino3        Nino34        Nino4
Week          SST SSTA     SST SSTA     SST SSTA     SST SSTA
03JAN1990     23.4-0.4     25.1-0.3     26.6 0.0     28.6 0.3
10JAN1990     23.4-0.8     25.2-0.3     26.6 0.1     28.6 0.3
17JAN1990     24.2-0.3     25.3-0.3     26.5-0.1     28.6 0.3

到目前为止,我可以用

  x = readLines(path)

但是文件混合了空白"和-"作为分隔符,而且我不是正则表达式专家.我很感激任何帮助将它变成一个漂亮而干净的 R 数据框.谢谢!

But the file mixes 'white space' with '-' as separators, and i'm not a regex expert.I Appreciate any help on turning this into a nice and clean R data-frame.thanks!

推荐答案

这是一个固定宽度的文件.使用read.fwf()读取:

This is a fixed width file. Use read.fwf() to read it:

x <- read.fwf(
  file=url("http://www.cpc.ncep.noaa.gov/data/indices/wksst8110.for"),
  skip=4,
  widths=c(12, 7, 4, 9, 4, 9, 4, 9, 4))

head(x)

            V1   V2   V3   V4   V5   V6   V7   V8  V9
1  03JAN1990   23.4 -0.4 25.1 -0.3 26.6  0.0 28.6 0.3
2  10JAN1990   23.4 -0.8 25.2 -0.3 26.6  0.1 28.6 0.3
3  17JAN1990   24.2 -0.3 25.3 -0.3 26.5 -0.1 28.6 0.3
4  24JAN1990   24.4 -0.5 25.5 -0.4 26.5 -0.1 28.4 0.2
5  31JAN1990   25.1 -0.2 25.8 -0.2 26.7  0.1 28.4 0.2
6  07FEB1990   25.8  0.2 26.1 -0.1 26.8  0.1 28.4 0.3

更新

readr 包(2015 年 4 月发布)提供了一种简单快速的替代方案.

The package readr (released April, 2015) provides a simple and fast alternative.

library(readr)

x <- read_fwf(
  file="http://www.cpc.ncep.noaa.gov/data/indices/wksst8110.for",
  skip=4,
  fwf_widths(c(12, 7, 4, 9, 4, 9, 4, 9, 4)))

速度比较:readr::read_fwf()utils::read.fwf() 快约 2 倍.

Speed comparison: readr::read_fwf() was ~2x faster than utils::read.fwf ().

这篇关于读取固定宽度的文本文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-28 00:54