1

既存のテキスト ファイル (以下の抜粋を参照) の変数を R スクリプトに "置き換え" ようとしています。変数は var1 から var6 までと呼ばれ、以下の値を置き換える必要があります。テキスト ファイル内の変数の位置は常に同じです。

*** BLOCK B: WATER FLOW INFORMATION ************************************
hTab1   hTabN
1e-006   10000
  M          H
  0          0
var1     var2     var3     var4     var5     var6
0.095     0.41     0.03     1.5     0.26     0.5 

誰かが何かアイデアを持っていますか?敬具

4

2 に答える 2

1

私はこの解決策にたどり着きました。おそらく他の誰かがもっと簡単に来るでしょう。

  1. readLines を使用してデータを読み取り、行のリストを取得します
  2. grepl を使用して、行を含む行のインデックスを見つけますvar1
  3. strsplit: xxを使用して aa ベクトルの値を抽出します
  4. 新しい値を持つ vector の新しいリストを作成し、xx を使用して名前を付けます: ここで、新しい値は 1:6 です
  5. gsubfn古いリストを置き換えるために使用します。

ここに私のコード

ll <- readLines(textConnection(object='*** BLOCK B: WATER FLOW INFORMATION ************************************
  hTab1   hTabN
1e-006   10000
M          H
0          0
var1     var2     var3     var4     var5     var6
0.095     0.41     0.03     1.5     0.26     0.5 '))
## get the line with values
id <- which(grepl('var1',ll))
##

xx <-strsplit(gsub('[ ]+','|', ll[id+1]),'[|]')

## replace values
library(gsubfn)
vals <- 1:6
names(vals) <- xx[[1]]
ll[id+1] <- gsubfn("[[:digit:]]+[.][[:digit:]]+",  as.list(vals), ll[id+1])

1] "*** BLOCK B: WATER FLOW INFORMATION ************************************"
[2] "  hTab1   hTabN"                                                         
[3] "1e-006   10000"                                                          
[4] "M          H"                                                            
[5] "0          0"                                                            
[6] "var1     var2     var3     var4     var5     var6"                       
[7] "1     2     3     4     5     6 "               
于 2013-06-21T17:06:53.883 に答える
0

これが私がやった方法です(基本的にagstudyの解決策)

library(gsubfn)
l  <- readLines("myfile.txt")
id1 <- which(grepl('var1',l))
x <-strsplit(gsub('[ ]+','|', l[id1+1]),'[|]')
vals1 <- c("",0.095, 0.41, 0.03,  1.5,0.26,999999)    # var values to be altered manually, i added ""
names(vals1) <- x[[1]]
l[id1+1] <- gsubfn("[[:digit:]]+[.][[:digit:]]+",  as.list(vals1), l[id1+1])
writeLines(l, "myfile.txt")                           # overwrites the old myfile.txt

/乾杯

于 2013-06-21T18:05:43.347 に答える