2011-10-28 11 views
1

サイズ103740 x 4のデータフレームをワイドフォーマットに再形成したい、つまり、最初のテキストブロックから2番目のテキストブロックに移動したいとします。データフレームの一部に適用する場合は、次の機能が十分に動作しますが、完全なデータフレームに適用されたとき、それは私のマシンの使用可能なメモリを使い果たす:Rの大きなデータフレームをアンスタッキングするためのより良い方法は何ですか?

reshape(analysis1[1:8], idvar=c("name", "sire_name"), 
     timevar = "course", direction = "wide")[, -c(1,2)] 

このデータフレームのスタックを解除するには、いくつかのより良い方法は何ですか?

  name sire_name  course appearance 
1  A Beetoo Bahhare  Kempton   0 
2  A Beetoo Bahhare  Lingfield   9 
3  A Beetoo Bahhare  Southwell   0 
4  A Beetoo Bahhare Wolverhampton   0 
5 A Bid In Time Danetime  Kempton   0 
6 A Bid In Time Danetime  Lingfield   3 
7 A Bid In Time Danetime  Southwell   2 
8 A Bid In Time Danetime Wolverhampton   2 
... 

    Kempton Lingfield Southwell Wolverhampton 
1  0   9   0    0 
5  0   3   2    2 
... 

私はデータフレームをデータテーブルに移動しようとしましたが、これを単独で行うだけでは効果がありません。

答えて

1

このようにしたい場合は、ベースRの形を変えるのが最も効率的です。私はちょうど外観の行列を作成し、それをdata.frame型にキャストし、列に名前を付けます。今

newDF <- data.frame(matrix(oldDF$appearance, ncol = 4, byrow = TRUE)) 
names(newDF) <- oldDF$course[1:4] 

、あなたは以下がより堅牢であるコースの列に複数の値を、それを提示し、多分持ってきたと同じようにソートされたフレームを持っていない場合は...

oldDF <- oldDF[ order(oldDF$course), ] 
s <- sort(unique(oldDF$course)) 
newDF <- data.frame(matrix(oldDF$appearance, ncol = length(s))) 
names(newDF) <- s 

(注文機能に他の列を追加することで、ネクタイを壊すことができます)

データを再構成するために使用できる多くのコマンドの大きな利点の1つは、データの順序、欠けている細胞などが含まれます。しかし、これにより、非常に大きなdata.frameオブジェクトで簡単に再構成できます。

+0

これはおそらく、データフレームが適切にソートされていることを前提としています。 – joran

+0

はい、最初のバージョンでは、データフレームが示されているようにソートされていると想定しています。そうでない場合は、2番目のバージョンを使用してください。 – John

+1

これは基本的には 'reshape :: melt'と同じです。私はそれがはるかに遅い場合は驚かれるだろう。そしてそれが遅い場合、私はあなたがおそらく長い間違った時間で時間を節約すると主張したいと思います。なぜなら、欠損値などを心配する必要がないからです。 – hadley

関連する問題