2016-05-21 3 views
1

異なる数の列と行を同時に含む2つのdfm行列を連結する方法がありますか?それはいくつかの追加のコーディングで行うことができるので、私はアドホックコードに興味はありませんが、一般的かつエレガントなソリューションには何かが存在する場合に興味があります。'quanteda'パッケージのdfm行列を連結する

例:

dfm1 <- dfm(c(doc1 = "This is one sample text sample."), verbose = FALSE) 
dfm2 <- dfm(c(doc2 = "Surprise! This is one sample text sample."), verbose = FALSE) 
rbind(dfm1, dfm2) 

はエラーを返します。

'tm'パッケージは、そのdfm行列をすぐに連結することができます。それは私の目的にとっては遅すぎます。

また、「quanta」の「dfm」はS4クラスです。

答えて

3

最新のバージョンを使用している場合は、「箱から出して」動作するはずです:

packageVersion("quanteda") 
## [1] ‘0.9.6.9’ 

dfm1 <- dfm(c(doc1 = "This is one sample text sample."), verbose = FALSE) 
dfm2 <- dfm(c(doc2 = "Surprise! This is one sample text sample."), verbose = FALSE) 

rbind(dfm1, dfm2) 
## Document-feature matrix of: 2 documents, 6 features. 
## 2 x 6 sparse Matrix of class "dfmSparse" 
##  is one sample surprise text this 
## doc1 1 1  2  0 1 1 
## doc2 1 1  2  1 1 1 

featuresは、DFMオブジェクト(ヘルプファイルの例がある)であるにも?selectFeaturesを参照してください。

追加:これは正しく列と一致する必要があります行列のための通常のrbind方法とは異なり、一般的な機能セットに2つのテキストを整列すること

注意。

require(tm) 
dtm1 <- DocumentTermMatrix(Corpus(VectorSource(c(doc1 = "This is one sample text sample.")))) 
dtm2 <- DocumentTermMatrix(Corpus(VectorSource(c(doc2 = "Surprise! This is one sample text sample.")))) 
rbind(dtm1, dtm2) 
## Error in f(init, x[[i]]) : Numbers of columns of matrices must match. 

これはほとんどそれを取得しますが、繰り返し機能を複製するようだ:

as.matrix(rbind(c(dtm1, dtm2))) 
##  Terms 
## Docs one sample sample. text this surprise! 
## 1 1  1  1 1 1   0 
## 1 1  1  1 1 1   1 
+0

おかげで、同じ理由から、rbind()は実際にDocumentTermMatrixためTMパッケージが異なる用語を持つオブジェクトでは動作しません。 !それは非常に便利なオプション、コードを簡素化します。 –

+0

'tm'を使用する場合は、関数 'c'のディスパッチを参照する必要があります。このパッケージは、独自のコードを使用してこのような特別なバインディングを実行します。 "ベースR"自体は(rbindの制限のために)それを行うことはできません。したがって 'c(dtm1、dtm2)'は正しく動作します。ちなみに、「tm」DFMは「quanteda」DFMから直接作成できますが、私が知る限り、その逆はできません。 –

+0

興味深い - 上記の私の編集を参照してください。 –

関連する問題