0

Rを使用して古いFORTRAN入力ファイルにアクセスしていますが、データフレームをテキストファイルにシンクしてその形式を維持するのに問題があります。

私のアプローチは次のとおりです。

  1. read.tableデータのインポートに使用します。
  2. 1つの列の数値を調整します(スカラーを掛けます)。
  3. 関数を使用してすべてを保存し直しwrite.tableます。

私のコード:

con <- file(paste(pth,'/Input/met/G_test.MET', sep=""))
aaa <- read.table(con)
aaa[,2]=aaa[,2]*0.1
write.table(aaa)
close(con)

入力ファイルの形式が変更されたため、私のアプローチは機能しませんでした(列間のスペースは無視されました)。私の質問:これらの3つのステップを実行し、同じ形式を維持するための良い方法はありますか?フォーマットを維持するために使用できreadLinesます。その後、大きなループですべての数値を変更する必要があります。

データは次のようになります(列間のスペースの数はわかっていました)。

 010192      0.00      0.04       8.3
 010292      0.33      0.02       7.5
 010392      0.61      0.23      11.7
 010492      0.00      0.04      10.0
 010592      0.00      0.07      10.6
 010692      0.00      0.02       8.9
 010792      0.00      0.19       9.4
 010892      0.00      0.30       9.4
 010992      0.00      0.08      11.4

提案をありがとう。

アップデート

フォーマットを維持し、1つの列から数値を更新する必要があるため。私は「ハイブリッド」アプローチを思いついた。この方法は機能しましたが、標準的なアプローチに関する提案に感謝します。

  1. フォーマットを維持し、開始ゼロを維持するために、readLinesを使用してデータを文字としてロードします。
  2. read.tableを使用して、データをdata.frameとしてロードし、それらを変更します
  3. ループ内の数字を置き換えます。

    con_rain<- file(paste(pth,'/Out_Test/GA1LEVAP.MET', sep=""))
    a_rain=readLines(con_rain)
    b_rain=read.table(con_rain) 
    
    for (i in 1:731){
      a_rain[i]=paste(substr(a_rain[i],1,13),sprintf("%3.2f", b_rain[i,2]*p[19]),substr(a_rain[i],18,37),sep="")
    }
    
    
    writeLines(a_rain, paste(pth,'/Out_Test/GA1LEVAP.MET', sep=""))
    
4

1 に答える 1

2

sep=適切な議論を提供するだけです。以下は、6 つのスペースの後にタブが続く例です。

R> head(trees)
  Girth Height Volume
1   8.3     70   10.3
2   8.6     65   10.3
3   8.8     63   10.2
4  10.5     72   16.4
5  10.7     81   18.8
6  10.8     83   19.7
R> write.table(trees, sep="      \t", 
+              file="/tmp/trees6spaces.txt", row.names=FALSE, col.names=FALSE)
R> system("head /tmp/trees6spaces.txt")
8.3         70          10.3
8.6         65          10.3
8.8         63          10.2
10.5        72          16.4
10.7        81          18.8
10.8        83          19.7
11          66          15.6
11          75          18.2
11.1        80          22.6
11.2        75          19.9
R> 
于 2012-11-19T23:15:32.067 に答える