R 找到多列的加权平均数?
这是公式:R 找到多列的加权平均数?,r,statistics,R,Statistics,这是公式: 以下是使用dplyr中的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")
以下是使用
dplyr
中的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)
图书馆(magrittr)
种子集(200)
#制作一些数据
vvv%as.data.frame()
名称(vvv)%#为每行计算
do(data.frame)(
rfm_得分=加权平均值(
x=c(.$rank\u recenty、.$rank\u freq、.$rank\u monetary\u v),
w=c(.2、.3、.5)
)
)
) %>%
解组()%>%#撤消行组
使用_系列(“rfm_分数”)#提取加权平均值
头部(vvv)
#排名最近排名频率排名货币和rfm评分
# 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
,可以将加权平均值作为每行的三元素向量传递 权重参数是w
,而不是y
。可能适用(vvv,1,weighted.mean,w=c(0.2,0.3,0.5))
@ekstroem;假设没有missing@ekstroem可能矩阵版本是正确的,但是您能让apply
版本在示例上工作吗,因为它返回:'x'和'w'必须具有相同的长度那么apply(vvv[c(“rank\u-recenty”,“rank\u-freq”,“rank\u-monetary\u-v”)],1,加权平均值,w=c(0.2,0.3,0.5))
?