我有一个这样的矩阵。
term SaS PaP WH
affection 3.06 2.76 2.3
jealous 2 1.85 2.04
gossip 1.3 0 1.78
wuthering 0 0 2.58
我想将其转换为标准化矩阵,如下所示
term SaS PaP WH
affection 0.789 0.832 0.524
jealous 0.515 0.555 0.465
gossip 0.335 0 0.405
wuthering 0 0 0.588
我尝试使用缩放和扫描来标准化值。但是我得到了下面提到的错误
扫描(术语,2,colSums(术语),FUN =“/”)
colSums(术语)出错:
'x'必须是至少包含两个维度的数组
比例(术语,中心= FALSE,比例= colSums(术语))
colSums(术语)出错:
'x'必须是至少包含两个维度的数组
这是班级类型
> class(terms)
[1] "DocumentTermMatrix" "simple_triplet_matrix"
请帮助。
更新
根据@small_data的以下建议,我更改了代码如下:
terms <-DocumentTermMatrix(obama.train.p,control = list(weighting = function(x) weightTfIdf(x, normalize = FALSE)))
inspect(terms[1:2, 1:100])
sweep(terms, 2, colSums(as.matrix(terms)), FUN ="/" )
scale(terms, center = FALSE, scale = colSums(as.matrix(terms)))
幸运的是它没有抛出任何错误。但它没有规范化数据。
Docs 93republican94 93son 93stopgap 93surge94 93the 93we 93where 93whi 93you a10 abandon abbottabad
Obama 1.txt 0 0 0 0 0 0 0 0 0 0 2.321928 0
Obama 10.txt 0 0 0 0 0 0 0 0 0 0 0.000000
如果您可以看到废弃的单词,即使在归一化之前和之后,该值也是2.321928。对此有任何帮助对我有用。
谢谢
答案 0 :(得分:1)
由于第一列的类是因子sweep
,因此功能不起作用。试试这个:
data.frame(term=term$term,sweep(term[,-1], 2, colSums(term[,-1]), FUN ="/" ))
term SaS PaP WH
1 affection 0.4811321 0.5986985 0.2643678
2 jealous 0.3144654 0.4013015 0.2344828
3 gossip 0.2044025 0.0000000 0.2045977
4 wuthering 0.0000000 0.0000000 0.2965517