在 'quanteda' 包中连接 dfm 矩阵
Concatenate dfm matrices in 'quanteda' package
有没有办法连接两个同时包含不同列数和行数的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 矩阵;对我来说太慢了。
还记得 'quanteda' 中的 'dfm' 是 S4 class。
应该工作 "out of the box",如果您使用的是最新版本:
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
另请参阅 ?selectFeatures
,其中 features
是 dfm 对象(帮助文件中有示例)。
已添加:
请注意,这将正确对齐公共特征集中的两个文本,这与矩阵的常规 rbind
方法不同,矩阵的列必须匹配。出于同样的原因,rbind()
实际上在 tm 包中对于具有不同术语的 DocumentTermMatrix 对象不起作用:
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
有没有办法连接两个同时包含不同列数和行数的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 矩阵;对我来说太慢了。
还记得 'quanteda' 中的 'dfm' 是 S4 class。
应该工作 "out of the box",如果您使用的是最新版本:
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
另请参阅 ?selectFeatures
,其中 features
是 dfm 对象(帮助文件中有示例)。
已添加:
请注意,这将正确对齐公共特征集中的两个文本,这与矩阵的常规 rbind
方法不同,矩阵的列必须匹配。出于同样的原因,rbind()
实际上在 tm 包中对于具有不同术语的 DocumentTermMatrix 对象不起作用:
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