2017-05-17 33 views
1

私はRプログラミング言語の初心者で、現在はプロジェクトで作業しています。 巨大なDocument Term Matrix(DTM)があり、それをデータフレームに変換したいと思います。 しかし、機能の制限のために、私はそうすることができません。データフレーム(DTM)をデータフレームに変換する(Rプログラミング)

私が使ってきた方法は、まずそれを行列に変換して、それをデータフレームに変換することです。

DF <- data.frame(as.matrix(DTM), stringsAsFactors=FALSE) 

これは、より小さなサイズのDTMで完全に機能していました。しかし、DTMは、私は、以下のようにエラーをもたらす、マトリックスに変換することはできませんよ、大きすぎる場合:

Error: cannot allocate vector of size 2409.3 Gb

は、私は解決策を見つけることができないのですが、数日間のオンライン探してみました。 誰かがDTMをDFに変換する最良の方法を提案できれば本当に感謝します(特に大型DTMを扱う場合)。

+0

[Rメモリ割り当て "エラー:サイズ75.1Mbのベクトルを割り当てることができません"](http://stackoverflow.com/questions/10917532/r-memory-allocation-error-cannot-allocate-vector-of) -size-75-1-mb) – Rilcon42

+0

おそらく、著者は異なっており、ここでの望ましいメモリ割り当ては非常に大きいです。 DTMは疎である傾向があるので、それらを(疎でない)行列に自然に変換するのは危険です。 – beigel

答えて

0

data.frame(as.matrix(DTM), stringsAsFactors=False)の代わりにas.data.frame(as.matrix(DTM), stringsAsFactors=False)がこのトリックを行う可能性があります。

APIドキュメントでは、as.data.frame()は単純にマトリックスをデータフレームに強制しますが、data.frame()は入力から新しいデータフレームを作成することに注意してください。

as.data.frame(...) - >https://stat.ethz.ch/R-manual/R-devel/library/base/html/as.data.frame.html

data.frame(...) - tidytext packageで>https://stat.ethz.ch/R-manual/R-devel/library/base/html/data.frame.html

+0

それでも問題は解決しません – Jeffrey

2

ちょうどそれを行うための機能が実際にそこにあります。チーフル(基本的にはきれいに印刷される派手なデータフレーム)を返すtidy関数を使用してみてください。きちんとした機能についての素晴らしい点は、文字列を要素に変換しないことによって厄介なStringsAsFactors=FALSEの問題を処理し、DTMの希薄さにうまく対処することです。

as.matrixは、その文書内で用語が0回発生しても、すべての文書と用語に対してエントリを持つ非疎行列に変換しようとしています。 tidy`はそれをデータフレームに変換します。各データフレームには、各文書に含まれる用語のカウントしかありません。ここにあなたの例では

あなたは

library(tidytext) 
DF <- tidy(DTM) 

(tidyverseで作業するためのもの)tidytextパッケージhereを使用する方法についても、ビネットがありますを実行すると思います。

+0

提案していただきありがとうございます。しかし、私は実際にはそのままデータフレームを保持したいと思っています。私はそれを次の処理に使用するので、実際には代わりに疎のデータフレームを保持したいと考えています。 – Jeffrey

+0

データフレームをそのまま維持することをどのように意味しますか?これが役立つかどうかは分かりませんが、 'tidy'は基本的にデータフレームであるものを返します。 – beigel

関連する問題