1

大きな postgresql テーブルからデータをインポートしたいと思います。スペースを節約するために、テキスト値を係数に自動的に変換したいと思います。

たとえば、データセットには多くの文字列変数 (「男性」、「女性」など) があり、これらを要因としてインポートできれば、次のようなコマンドを使用してデータ セットを読み込むことができます。

df <- dbGetQuery(con, "select id, gender from large.table"))

(#, "Male") のような行を受け取る代わりに、メモリを節約できるように (#, 0) のような行が必要です。

選択したデータベースで以下のクエリを試し、「性別」列を文字列と等しくすると、df_large のサイズがはるかに大きくなることがわかります。

df <- dbGetQuery(con, "select id, gender from large.table"))

df_large <- df$gender
print(object.size(df_large), units="Kb")

df_small <- factor(df$gender)
print(object.size(df_small), units="Kb")
4

1 に答える 1

0

2点。

1つ目は、これが問題である場合、CASEがあなたの答えです

 SELECT id, case when gender = male then 1::int else 0 end as is_male from large_table;

2 つ目は、メモリに問題がある場合、正直なところ、large_table から膨大な数の行をインポートしてクライアントで分析したくないということです。おそらく、データベースでインクリメンタルに分析したいと思うでしょう。あなたが何をしているのかわからないと、言うのは難しいです。ただし、集計、ウィンドウ関数、および場合によっては PL/R を調べたい場合があります。

于 2013-11-18T05:01:59.927 に答える