2

私は中規模のデータベース (〜 400,000 行、27 列) を持っており、比較のために同じ基準でほとんどの列 (25 列) を検索する必要があります。データを「長い」形式に再形成/溶解する方が効率的であると考えたので、reshape2 パッケージを使用して ~9,000,000 行/4 列のデータセットを生成しました。非常に長い時間がかかることを除けば (私は 2GB の RAM しか持っていません)、再形成されたファイルのサイズは 500MB と巨大でした。

より効率的/計算量の少ない方法はありますか?

  1. 幅の広いデータから長いデータへの再形成と保存?
  2. 再形成をまったく回避し、同じ検索条件で複数の列を検索しますか?
4

2 に答える 2

5

@Matthew が既に説明したことに加えて、データ圧縮が、このように異なるファイル サイズを取得する理由として適切な役割を果たす可能性があるという私のコメントについて詳しく説明します。

たとえば、これを参照してください。

set.seed(1234)
A <- matrix(runif(1000), 1000, 1000, byrow = TRUE)
A <- A + runif(5)
B <- t(A)
save(A, file="A.RData")
save(B, file="B.RData")

2 つのデータ構造ABには同じデータが含まれていますが、転置されていますが、ファイル サイズは大きく異なります。

file.info("B.RData")$size / file.info("A.RData")$size
# [1] 97.38222

なんで?Rの圧縮アルゴリズムは(ほとんどの場合)データを列ごとに調査しているようです。

@Matthewの例を見ると、個々の列conc.*は非常にランダムに見えます。つまり、元の列concは圧縮アルゴリズムに対してランダムに見えないかもしれませんが、圧縮するのは難しいです。

于 2013-03-17T23:56:34.583 に答える
4

これが発生する可能性があります。

から?reshape

summary(Indometh)
wide <- reshape(Indometh, v.names = "conc", idvar = "Subject",
            timevar = "time", direction = "wide")


> dim(Indometh)
[1] 66  3
> dim(wide)
[1]  6 12
> 66*3    # long
[1] 198
> 6*12    # wide
[1] 72

何が起こっているかというと、長い形式で値を繰り返していることです (ここでは、Subjectおよびtime):

> head(Indometh)
  Subject time conc
1       1 0.25 1.50
2       1 0.50 0.94
3       1 0.75 0.78
4       1 1.00 0.48
5       1 1.25 0.37
6       1 2.00 0.19

> wide
   Subject conc.0.25 conc.0.5 conc.0.75 conc.1 conc.1.25 conc.2 conc.3 conc.4 conc.5 conc.6 conc.8
1        1      1.50     0.94      0.78   0.48      0.37   0.19   0.12   0.11   0.08   0.07   0.05
12       2      2.03     1.63      0.71   0.70      0.64   0.36   0.32   0.20   0.25   0.12   0.08
23       3      2.72     1.49      1.16   0.80      0.80   0.39   0.22   0.12   0.11   0.08   0.08
34       4      1.85     1.39      1.02   0.89      0.59   0.40   0.16   0.11   0.10   0.07   0.07
45       5      2.05     1.04      0.81   0.39      0.30   0.23   0.13   0.11   0.08   0.10   0.06
56       6      2.31     1.44      1.03   0.84      0.64   0.42   0.24   0.17   0.13   0.10   0.09
于 2013-03-17T21:52:17.577 に答える