这是公式:

𝟎。 𝟐×𝑹+𝟎。 𝟑×𝑭+𝟎。 𝟓×𝑴

我想从代表R,F和M的3列中找到加权平均值

我尝试了这个:

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函数的方式,但是尝试了不同的方式并查看了帮助页面后,我可以找到正确的方法。

最佳答案

这是使用rowwisedo的解决方案:

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


使用dplyrrowwise,您可以将do的值作为每行的三元素向量传递。

07-24 09:52