0

このデータセットの列幅(3列すべて)を次のように設定します。anim= 1-10; sireid = 11-20; damid=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)
4

3 に答える 3

3

あなたの質問やコメントを読んでから以前の回答まで、あなたは自分のデータで固定幅のファイルを作成しようとしているように思えます。この場合、write.fwfパッケージ内の関数を使用できgdataます。

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

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)
于 2011-10-31T05:44:38.453 に答える
2

sprintf()Cの対応する関数から派生した関数を使用して、数値と文字列の固定幅出力を書き込むこともできます。

たとえば、整数を0で埋めるには:

sprintf("%012d",99)

スペースを埋めるには:sprintf( "%12d"、123)

そして文字列を埋めるために:

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

フォーマットのオプションはを介して見つかり?sprintf、固定幅のC出力をフォーマットするための多くのガイドがあります。

于 2011-10-31T12:12:10.823 に答える
0

SASのバックグラウンドから来ているようですが、予期しない切り捨てを避けるために、文字変数には明示的な長さを指定する必要があります。Rでは、これについて心配する必要はありません。文字列は必要な数の文字を含み、内容が変わると自動的に伸縮します。

ただし、注意する必要があるのは、文字変数をデータフレーム内の因子にサイレント変換することです。ただし、後で内容を変更しない限り、デフォルトで使用できるはずです。

于 2011-10-21T03:32:53.587 に答える