这是公式:
𝟎。 𝟐×𝑹+𝟎。 𝟑×𝑭+𝟎。 𝟓×𝑴
我想从代表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
函数的方式,但是尝试了不同的方式并查看了帮助页面后,我可以找到正确的方法。 最佳答案
这是使用rowwise
和do
的解决方案:
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
使用
dplyr
和rowwise
,您可以将do
的值作为每行的三元素向量传递。