为R中的不同行定义特定列宽

时间:2012-06-06 14:06:17

标签: r structure rows

我对R来说并不陌生,但我找不到任何解决方案。我的目标是创建一个基于“未知”数据类型的文件,称为“通用变量格式”“* .uvf”,并从另一个文件的数据中填充它的参数。该格式适用于不同类型的(水文)时间序列。

问题是,它的标题是一个4行标题类型,具有强大的结构定义。我想将每个单元格定义为一列。

示例:头文件中的第三行应构造如下:

  • 第1-15栏:“放置”
  • 第16-25栏:“X坐标”
  • 第26-35栏:“Y坐标”
  • 等......

重要的是,向量“X”在第3行的第16-25行中没有多于10的数字。否则程序无法读取X坐标。

我想从另一个文件中读取X坐标,将其保存为名为X的向量并将其保存在上面解释的位置。在此之后,“真实数据”(例如降水)应该逐行列在每天的标题下。

The uvf Format (in german)

示例:

*Z
Abfluss        m3/s            K
A                 2509510   5636680       120
86110100158611010130
8611010015 0.184    
8611010030 0.189    
8611010045 0.191    
8611010100 0.1940000
8611010115 0.2010000
8611010130 0.2010000

有几个德国条目;但那应该不是问题。

1 个答案:

答案 0 :(得分:0)

步骤1:使用readLines函数读取前四行,并从这四行中解析出您的详细信息:

1. Zeile : *Z
2. Zeile : Spalte 1-15 Parameter, Spalte 16-30 Einheit, Spalte 32 DefArt (I,K,M)
3. Zeile : Spalte 1-15 Ort, Spalte 16-25 X, Spalte 26-35 Y, Spalte 36-45 Höhe
4. Zeile : Spalte 1-10 Start-Zeitpunkt, Spalte 11-20 End-Zeitpunkt 

可以使用read.fwf(textConnection(.))在一行或使用substr解析第二行。

fmtlines <- readLines(textConnection("*Z
 Abfluss        m3/s            K
 A                 2509510   5636680       120
 86110100158611010130
 8611010015 0.184    
 8611010030 0.189    
 8611010045 0.191    
 8611010100 0.1940000
 8611010115 0.2010000
 8611010130 0.2010000
 Einheit<- substr( fmtlines[2], 16, 30 )
 Einheit
[1] "m3/s           "

同样地从第三和第四行中提取其余参数。

步骤2:然后使用带有skip = 4参数的read.fwf()和第一步中的派生格式参数来完成该过程。