2011-10-21 14 views
0

このデータセットの列幅(3列すべて)を設定するには、次のようにします:anim = 1-10;サイレイド= 11-20;ダメージ= 21-30。一部の列に欠損値があります。データセットの列幅を設定する

anim=c("1A038","1C467","2F179","38138","030081") 
sireid=c("NA","NA","1W960","1W960","64404") 
damid=c("NA","NA","1P119","1P119","63666") 

mydf=data.frame(anim,sireid,damid) 
+0

私は正直言って、私は実際にあなたが列の幅の意味を知らない。それをもっと詳しく説明できますか? – joran

+0

@joran:例:幅を設定したい、または最初の列( "anim")の長さを1-6として設定します。私は可能な最大文字数に従って長さを設定しています。たとえば、最後のアニメーションIDが「030081」の場合、6文字です。私は2つの列に同じことをしたい。ありがとう! – baz

+0

香港のような音が当然あります。私はSASを一度も使用していないので、誰もRでこれをしたくないということは私には起こりませんでした。 – joran

答えて

3

あなたの質問とあなたのコメントを前の回答に読み取ることから、固定幅のファイルをデータで作成しようとしているようです。このような場合は、パッケージgdataに機能write.fwfを使用することができます。

パッケージをロードし、一時出力ファイルを作成します。

library(gdata) 
ff <- tempfile() 

は一時ファイルに固定幅フォーマットでデータを書きます

write.fwf(mydf, file=ff, width=c(10,10,10), colnames=FALSE) 

scanでファイルを読み込み、結果を印刷(固定幅の出力を発揮する):

zz <- scan(ff, what="character", sep="\n") 
cat(zz, sep="\n") 

1A038  NA   NA   
1C467  NA   NA   
2F179  1W960  1P119  
38138  1W960  1P119  
030081  64404  63666  

は、一時ファイルの削除:

unlink(ff) 
+0

Rのfwデータも扱わなければなりませんでした。また、 'read.fwf –

+0

@ ran2もあります。関数 'read.fwf'があります。私の例では、各行が単一の文字列( 'read.fwf'は値を解析しているはずです)であることを説明したかったので、これを使用したくありませんでした。 – Andrie

+0

あなたの例を改善するつもりはありません完全性のためにこのコメントを追加するだけです;特に)別のパッケージ(utils)IIRCからです。 –

0

予期せぬ切り捨てを避けるために、文字変数の明示的な長さを指定する必要があるSASバックグラウンドから来ているようです。 Rでは、これについて心配する必要はありません。文字列は必要なだけの文字数を持ち、コンテンツの変更に応じて自動的に展開および縮小します。

ただし、文字変数をデータフレーム内の要素にサイレントに変換することに注意してください。しかし、後の時点で内容を変更しない限り、デフォルトでライブできることが必要です。

+0

私はこのデータを設定するためにRを使用しています。このデータは、別のプログラムで実行する予定です。ありがとう! – baz

+0

ああ、その場合は、固定幅のフィールドではなく、コンマ区切りファイル(csv)として書き出すほうがよいでしょう。固定幅としてエクスポートすることは可能ですが、おそらくそれは価値があるよりも面倒です。ほとんどのプログラムはcsvファイルを直接読み込みます。 –

+0

これは一般的には正しいですが、固定幅のファイルはメモリマッピングのために役立ちます。レイアウトが非常に単純なマッピング関数に適しているため、データを探す場所を正確に知ることができます。結果として、データへのランダムアクセスを得るために、すべての行をインデックス化する必要も、すべての行を解析する必要もありません。 – Iterator

2

をまたCの相手方から派生sprintf()機能を使用して、数値や文字列の固定幅の出力を書き込むことができます。 0とパッド整数に例えば

sprintf("%012d",99) 

スペースをパッドに: はsprintf( "%12D"、123)

パッド列に:

sprintf("%20s","hello world") 

書式設定のオプションは?sprintfで見つかり、固定幅のC出力を書式設定するためのガイドが多数あります。

関連する問題