8
Stataにはcompress
というコマンドがあり、すべてのデータ行を調べ、それぞれを最も効率的な形式に強制しようとします。たとえば、data.frame内に文字ベクトルとして格納された一連の整数がある場合、整数に変換します。Stataの `compress`コマンドに相当するR?
このような関数をRに書く方法は想像できますが、すでに存在していますか?
Stataにはcompress
というコマンドがあり、すべてのデータ行を調べ、それぞれを最も効率的な形式に強制しようとします。たとえば、data.frame内に文字ベクトルとして格納された一連の整数がある場合、整数に変換します。Stataの `compress`コマンドに相当するR?
このような関数をRに書く方法は想像できますが、すでに存在していますか?
技術的には、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]]))
指定された値の一部がNAではない場合、整数性と強引性をテストするコードを書くのは簡単でしょうが、一般的な答えは「いいえ」と思います。 –
それも私の考えだった。そのトリックは効率的なコードを書くことで、それは永遠に実行することができませんでした。正規表現は明らかに始めるが、遅すぎるかもしれない。 –
length(levels(factor)))を使用してテストし、その値がベクトルの長さの20%未満だった場合は、ファクタに変換するとスペースを節約できます。同様に、ベクトルvrcのどの部分が値== trunc(vec)を持っているかを調べることができます。数値を整数に強制するのが賢明かどうかのテストかもしれません。私は、正規表現のメソッドの適用性はそれほどわかりませんでしたが、おそらく私は再び鈍っています。 –