2

我需要在 R 中后处理一些 FORTRAN 输出文件。例如,我需要从输出文件中读取 20 行并忽略空格。然后将它们转换为向量或矩阵。我想知道是否有更好的方法来忽略空格并保留值?谢谢!这是我的 Out.txt 文件(我只需要最后四列):

 CNC HORIZON     COMPARTMENT      TOTAL      ADSORBED   DISSOLVED  GAS CONC.
 CNC                              (MG/KG)    (MG/KG)    (MG/L)     (MG/L)
 CNC --------------------------------------------------------------------------
 CNC
 CNC
 CNC   1            1             0.4062     0.3737      1.210     0.2419E-05
 CNC   1            2             0.4942     0.4547      1.472     0.2943E-05
 CNC   1            3             0.4930     0.4536      1.468     0.2936E-05
 CNC   1            4             0.4812     0.4427      1.433     0.2865E-05
 CNC   1            5             0.4682     0.4307      1.394     0.2788E-05
 CNC   1            6             0.4550     0.4186      1.355     0.2710E-05
 CNC   1            7             0.4418     0.4065      1.315     0.2631E-05
 CNC   1            8             0.4286     0.3944      1.276     0.2552E-05
 CNC   1            9             0.4154     0.3822      1.237     0.2474E-05
 CNC   1           10             0.4022     0.3701      1.198     0.2395E-05

以下是我的方法:

TOT={}
file_out <- file(paste(pth,'/Out.txt', sep=""))
b=readLines(file_out)
dd=as.numeric(ldply(strsplit(b[88334],"   "))) # I have to adjust the amount of spaces in
                                               # order to separate numbers out
TOT[1]=dd[10]                                  # It is not always 10
4

1 回答 1

1

如果您不介意重新标记列,这是一个非常简单的 read.table 练习。

b <- read.table("path/to/Out.txt",skip=5)

  V1 V2 V3     V4     V5    V6        V7
1  CNC  1  1 0.4062 0.3737 1.210 2.419e-06
2  CNC  1  2 0.4942 0.4547 1.472 2.943e-06
3  CNC  1  3 0.4930 0.4536 1.468 2.936e-06
4  CNC  1  4 0.4812 0.4427 1.433 2.865e-06
5  CNC  1  5 0.4682 0.4307 1.394 2.788e-06
6  CNC  1  6 0.4550 0.4186 1.355 2.710e-06
7  CNC  1  7 0.4418 0.4065 1.315 2.631e-06
8  CNC  1  8 0.4286 0.3944 1.276 2.552e-06
9  CNC  1  9 0.4154 0.3822 1.237 2.474e-06
10 CNC  1 10 0.4022 0.3701 1.198 2.395e-06
于 2012-10-23T18:56:36.750 回答