R - 如何使用R

时间:2015-09-15 14:35:54

标签: r

我有一个这样的矩阵。

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。对此有任何帮助对我有用。

谢谢

1 个答案:

答案 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