2012-02-20 13 views
8

Stataにはcompressというコマンドがあり、すべてのデータ行を調べ、それぞれを最も効率的な形式に強制しようとします。たとえば、data.frame内に文字ベクトルとして格納された一連の整数がある場合、整数に変換します。Stataの `compress`コマンドに相当するR?

このような関数をRに書く方法は想像できますが、すでに存在していますか?

+2

指定された値の一部がNAではない場合、整数性と強引性をテストするコードを書くのは簡単でしょうが、一般的な答えは「いいえ」と思います。 –

+0

それも私の考えだった。そのトリックは効率的なコードを書くことで、それは永遠に実行することができませんでした。正規表現は明らかに始めるが、遅すぎるかもしれない。 –

+0

length(levels(factor)))を使用してテストし、その値がベクトルの長さの20%未満だった場合は、ファクタに変換するとスペースを節約できます。同様に、ベクトルvrcのどの部分が値== trunc(vec)を持っているかを調べることができます。数値を整数に強制するのが賢明かどうかのテストかもしれません。私は、正規表現のメソッドの適用性はそれほどわかりませんでしたが、おそらく私は再び鈍っています。 –

答えて

8

技術的には、read.tableは、type.convertの助けを借りて正確に行います。だから、それを使用することができます - それは、最も効率的な方法が、おそらく最も簡単ではありません。

df <- as.data.frame(lapply(df ,function(x) type.convert(as.character(x)))) 

実際にはしかし、選択的にそれを行うには良いかもしれなので、あなただけの文字/要因に触れる:

for (i in seq.int(df)) if (is.factor(df[[i]]) || is.character(df[[i]])) 
    df[[i]] <- type.convert(as.character(df[[i]])) 
関連する問題