这是公式:
。 ×+。 ×+。 ×
我想找到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
函数的方式,但在尝试不同的方法并查看帮助页面后,我可以找到正确的方法。
答案 0 :(得分:0)
以下是使用rowwise
中的do
和dplyr
的解决方案:
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
使用rowwise
和do
,您可以将值weighted.mean
作为每行的三元素向量传递。