4

これは確かに、答えを見つけることができない非常に単純な質問です。

R には、2 つの列を持つファイルがあります。1 つはカテゴリ データ名、もう 1 つはカウント列 (各カテゴリのカウント) です。小さなデータセットでは、「reshape」と関数「untable」を使用して 1 つの列を作成し、その方法で分析を行います。問題は、これを大規模なデータセットでどのように処理するかです。

この場合、私のデータは膨大であり、うまくいきません。

私の質問は、次のようなものを配布データとして使用するように R に指示するにはどうすればよいかということです。

Cat Count
A   5
B   7
C   1

つまり、入力としてヒストグラムを与え、データに関する他の情報を計算するときに、A が 5 つ、B が 7 つ、C が 1 つあることを R に計算させます。

出力ではなく望ましい入力は、R がデータが次のように同じであることを理解することです。

A A A A A B B B B B B B C

妥当なサイズのデータ​​であれば、自分でこれを行うことができますが、データが非常に大きい場合はどうしますか?

編集

すべてのカウントの合計は 262,916,849 です。

それが何のために使用されるかという点で:

これは新しいデータであり、この新しいデータと他のデータとの相関関係を理解し​​ようとしています。線形回帰と混合モデルに取り組む必要があります。

4

4 に答える 4

7

あなたが求めているのは、カテゴリとカウントのデータフレームを、カテゴリが繰り返される単一の観測ベクトルに再形成することだと思います。1 つの方法を次に示します。

dat <- data.frame(Cat=LETTERS[1:3],Count=c(5,7,1))
#  Cat Count
#1   A     5
#2   B     7
#3   C     1
rep.int(dat$Cat,times=dat$Count)
# [1] A A A A A B B B B B B B C
#Levels: A B C
于 2012-09-11T18:46:57.110 に答える
4

@Blue Magister の優れた回答をフォローアップするために、合計数が 551,245,193 の 100,000 行のヒストグラムを次に示します。

set.seed(42)
Cat <- sapply(rep(10, 100000), function(x) {
  paste(sample(LETTERS, x, replace=TRUE), collapse='')
  })
dat <- data.frame(Cat, Count=sample(1000:10000, length(Cat), replace=TRUE))
> head(dat)
         Cat Count
1 XYHVQNTDRS  5154
2 LSYGMYZDMO  4724
3 XDZYCNKXLV  8691
4 TVKRAVAFXP  2429
5 JLAZLYXQZQ  5704
6 IJKUBTREGN  4635

これは私の基準ではかなり大きなデータセットであり、Blue Magister が説明する操作は非常に迅速です。

> system.time(x <- rep(dat$Cat,times=dat$Count))
   user  system elapsed 
   4.48    1.95    6.42 

操作を完了するために約 6GB の RAM を使用します。

于 2012-09-11T19:02:28.793 に答える
2

これは、計算しようとしている統計に大きく依存します。関数はxtabs、カウントを指定できるテーブルを作成します。Hmiscパッケージには、平均を計算するための重みのベクトルを取るような関数がありwtd.meanます(および標準偏差、分位数などの関連関数)。このbiglmパッケージを使用して、データセットの一部を一度に展開して分析できます。頻度データを処理する他のパッケージもおそらくありますが、どれが最適かは、回答しようとしている質問によって異なります。

于 2012-09-11T19:10:52.020 に答える