Как сложить столбцы взвешенного DFM в квантовой? - PullRequest
1 голос
/ 13 июня 2019

Рассмотрим этот забавный пример

mytib <- tibble(text = c('i can see clearly now',
                         'the rain is gone'),
                myweight = c(1.7, 0.005)) 
# A tibble: 2 x 2
  text                  myweight
  <chr>                    <dbl>
1 i can see clearly now    1.7  
2 the rain is gone         0.005

Я знаю, как создать dfm, взвешенный по docvars myweight.Я действую следующим образом:

dftest <- mytib %>% 
  corpus() %>% 
  tokens() %>% 
  dfm()

dftest * mytib$myweight 

Document-feature matrix of: 2 documents, 9 features (50.0% sparse).
2 x 9 sparse Matrix of class "dfm"
       features
docs      i can see clearly now   the  rain    is  gone
  text1 1.7 1.7 1.7     1.7 1.7 0     0     0     0    
  text2 0   0   0       0   0   0.005 0.005 0.005 0.005

Однако проблема в том, что я не могу использовать ни topfeatures, ни colSums.

Как можно суммировать значения в каждом столбце?

> dftest*mytib$myweight %>% Matrix::colSums(.)
Error in base::colSums(x, na.rm = na.rm, dims = dims, ...) : 
  'x' must be an array of at least two dimensions

Спасибо!

Ответы [ 2 ]

3 голосов
/ 13 июня 2019

Иногда оператор %>% наносит вред, а не помогает. Это работает:

colSums(dftest * mytib$myweight)
##      i     can     see clearly     now     the    rain      is    gone 
##  1.700   1.700   1.700   1.700   1.700   0.005   0.005   0.005   0.005 

Также рассмотрите возможность использования dfm_weight(x, weights = ...), если у вас есть вектор весов для каждого объекта. Приведенная выше операция перезапустит ваши веса, чтобы заставить их работать так, как вы хотите, но вы должны понимать, почему (в R из-за рециркуляции и из-за своего основного порядка столбцов).

1 голос
/ 14 июня 2019

Это было бы из-за приоритета оператора. Если мы проверим ?Syntax, специальные операторы имеют более высокий приоритет по сравнению с умножением (*)

...
%any%   special operators (including %% and %/%)  ###
* / multiply, divide   ###
...

Оберните выражение в скобках, и оно должно работать

(dftest*mytib$myweight) %>% 
       colSums
#     i     can     see clearly     now     the    rain      is    gone 
#   1.700   1.700   1.700   1.700   1.700   0.005   0.005   0.005   0.005 
...