2012-03-02 5 views
0

このような入力ファイルをRデータフレームにロードするにはどうすればよいですか? UNIXを使用している場合はこのようにこの形式をRデータフレームにロード

[S1]  [E1] |  [S2]  [E2] | [LEN 1] [LEN 2] | [% IDY] | [TAGS] 
===================================================================================== 
    959335 959806 |  169  640 |  472  472 | 80.84 | LmjF.34  ULAVAL|LtaPseq521 
    322990 324081 |  1436  342 |  1092  1095 | 83.86 | LmjF.12  ULAVAL|LtaPseq501 
    324083 324327 |  245  1 |  245  245 | 91.84 | LmjF.12  ULAVAL|LtaPseq501 
1097873 1098325 |  892  437 |  453  456 | 76.75 | LmjF.32  ULAVAL|LtaPseq491 
1098566 1098772 |  207  4 |  207  204 | 75.60 | LmjF.32  ULAVAL|LtaPseq491 
+0

列の位置が常に同じ場合、つまり固定幅形式の場合は、 'read.fwf'を使用できます。 –

答えて

3

これは、のような固定幅フォーマットされたデータを検索し、簡単にread.fwfで読み取ることができます - トリッキーなビットが退治される可能性があります|マーク。あなたは[TAGS]セクションで何をしたいですか?

ここでは、各フィールドの幅を計算し、いくつかのフィールド(長さ3)を追加して、マーカーは、セパレーターの列を削除するために、負の列のサブセットを使用し、その後、それを読み込む:

> widths=c(8,9,3,9,9,3,9,9,3,9,3,100) 
> read.fwf("data.txt",widths=widths,skip=2)[,-c(3,6,9,11)] 
     V1  V2 V4 V5 V7 V8 V10        V12 
1 959335 959806 169 640 472 472 80.84 LmjF.34  ULAVAL|LtaPseq521 
2 322990 324081 1436 342 1092 1095 83.86 LmjF.12  ULAVAL|LtaPseq501 
3 324083 324327 245 1 245 245 91.84 LmjF.12  ULAVAL|LtaPseq501 
4 1097873 1098325 892 437 453 456 76.75 LmjF.32  ULAVAL|LtaPseq491 
5 1098566 1098772 207 4 207 204 75.60 LmjF.32  ULAVAL|LtaPseq491 

を次の2つの列にタグを分割したい場合があります - ちょうど各部分の幅を仕事と幅にフィールド幅を追加しますベクター。読者のための練習。

注意ファイルは空白文字とNOTタブ文字と間隔をあけている場合のみ動作...

0

はR. と簡単ではありません、彼らはそれが(私はこのtecniqueを使用)、インポートの前にも、大容量のファイルを変換する(awkでのように)簡単なスクリプトです。

1

readLinesを使用してファイルを読むか

テスト<スキャン - 」[S1]を[E1 ] | [S2] [E2] | [LEN 1] [LEN 2] | [%IDY] | [タグ]

=========================================== ==========================================

959335 959806 | 169 640 | 472 472 | 80.84 | LmjF.34 ULAVAL | LtaPseq521

322990 324081 | 1436 342 | 1092 1095 | 83.86 | LmjF.12 ULAVAL | LtaPseq501

324083 324327 | 245 1 | 245 245 | 91.84 | LmjF.12 ULAVAL | LtaPseq501

1097873 1098325 | | 892 437 | 453 456 | 76.75 | LmjF.32 ULAVAL | LtaPseq491

1098566 1098772 | 207 4 | 207 204 | 75.60 | LmjF.32 ULAVAL | LtaPseq491'

TEST2 < - GSUB( '|'、」」、テスト固定= TRUE)

TEST2 < - GSUB( '='、 ''、TEST2、固定= TRUE )

TEST3 < - GSUB( '[\ t]は{2,8}'、 ';'、TEST2、パール= TRUE)

TEST3 < - GSUB( 'の\ n'、 ''、TEST3 、perl = TRUE)

test4 < -strsplit(test3、split = ';')

test5 < - data。フレーム(行列(TEST4 [[1]]のNcoI = 9、 byrow = T)、stringsAsFactors = FALSE)

COLNAMES(TEST5)[1:8] < -test5 [1,2:9]

TEST5 < -test5 [-1]

出力:

TEST5

[S1] [E1] [S2] [E2] [LEN 1] [LEN 2] [% IDY] [TAGS]     X9 

2 959335 959806 169 640 472 472 80.84 LmjF.34 ULAVAL LtaPseq521

3 322990 324081 1436 342 1092 1095 83.86 LmjF.12 ULAVAL LtaPseq501

4 324083 324327 245 1 245 245 91.84 LmjF.12 ULAVAL LtaPseq501

5 1097873 1098325 892 437 453 456 76.75 LmjF.32 ULAVAL LtaPseq491

6 1098566 1098772 207 4 207 204 75.60 LmjF.32 ULAVAL LtaPseq491

関連する問題