在R语言中基于特定序列计算特定类型的加权均值
问题描述
现有如下数据,需对Prob列按特定规则计算加权均值:
library("tidyverse") Mydata <- tibble( id = c(1,2,3,4,5,6,7,8,9,10), AGE = c(15,16,17, 18, 19, 20, 21, 22, 23,24), Prob = c(25,30,43,43,25,25,25,25,67,33) )
计算逻辑示例(以AGE15、AGE16为例):
- AGE15对应值:
(Prob[1] + Prob[2]*2 + Prob[3]*2 + Prob[4]*2 + Prob[5])/8 - AGE16对应值:
(Prob[2] + Prob[3]*2 + Prob[4]*2 + Prob[5]*2 + Prob[6])/8
后续每行按相同滑动窗口规则计算,最终需得到包含原始数据与加权均值列的结果。
解决方案
可以借助slider包的滚动窗口函数实现需求,步骤如下:
- 安装并加载依赖包(若未安装):
install.packages("slider") library(slider)
- 为原始数据添加加权均值列:
Mydata <- Mydata %>% mutate(weighted_prob = slide_dbl( .x = Prob, .f = ~ sum(.x * c(1,2,2,2,1)) / 8, .before = 0, .after = 4, .complete = TRUE # 仅保留能取到完整5行窗口的记录,若要保留所有行可改为FALSE,缺失值用NA填充 ))
执行后得到的结果示例:
# A tibble: 6 × 4 id AGE Prob weighted_prob <dbl> <dbl> <dbl> <dbl> 1 1 15 25 33.5 2 2 16 30 34.1 3 3 17 43 32.6 4 4 18 43 28.1 5 5 19 25 26.2 6 6 20 25 28.1
内容的提问来源于stack exchange,提问作者Mohammad Haddadi
相关产品推荐
相关产品推荐

