查找多列的加权平均值?

时间:2018-02-17 16:44:44

标签: r statistics

这是公式:

。 ×+。 ×+。 ×

我想找到3列代表 R F M

的加权平均值

我试过了:

vvv$rfm_score=weighted.mean(x=c(vvv$rank_recency, vvv$rank_freq, vvv$rank_monetary_v)
              ,w=c(.2,.3,.5))

但它给出的列对于所有行都是相同的?

为了澄清,每列都有一个从1到5的数字。后面的加权平均值是按照公式中显示的,每次根据需要使用一列来计算。

问题肯定在于我使用weighted.mean函数的方式,但在尝试不同的方法并查看帮助页面后,我可以找到正确的方法。

1 个答案:

答案 0 :(得分:0)

以下是使用rowwise中的dodplyr的解决方案:

library(dplyr)
library(magrittr)

set.seed(200)

# Make some data

vvv <-  matrix(sample(1:5,replace = TRUE,18),ncol = 3) %>% as.data.frame()

names(vvv) <- c("rank_recency","rank_freq","rank_monetary_v")  

head(vvv)
# rank_recency rank_freq rank_monetary_v
#            3         4               1
#            3         1               4
#            3         3               2
#            4         2               2
#            4         3               3
#            5         4               1

vvv$rfm_score <-   vvv %>% 
  rowwise() %>% # compute for each row
  do(data.frame(
            rfm_score=weighted.mean(
                          x=c(.$rank_recency,.$rank_freq,.$rank_monetary_v),
                          w=c(.2,.3,.5)
                      )
               )
     ) %>% 
  ungroup() %>% # undo row groups
  use_series("rfm_score") # extract the weighted means

head(vvv)
# rank_recency rank_freq rank_monetary_v rfm_score
#            3         4               1       2.3
#            3         1               4       2.9
#            3         3               2       2.5
#            4         2               2       2.4
#            4         3               3       3.2
#            5         4               1       2.7

使用rowwisedo,您可以将值weighted.mean作为每行的三元素向量传递。