在R语言中按周内星期维度计算PV变量中位数的实现咨询
实现方案
你已经完成预处理得到PV数据框,直接按Week字段分组统计所有PV后缀变量的中位数即可,以下是可直接运行的代码:
dplyr实现(和你现有代码生态一致)
library(dplyr) # 按星期几分组统计各PV变量中位数 week_pv_median <- PV %>% group_by(Week) %>% summarise( # 对所有_PV结尾的列计算中位数,na.rm=TRUE避免缺失值干扰 across(ends_with("_PV"), median, na.rm = TRUE) ) # 查看结果 print(week_pv_median)
运行后结果如下:
| Week | DR01_PV | DR02_PV | DR03_PV | DR04_PV | DR05_PV |
|---|---|---|---|---|---|
| Friday | 7 | 9 | 8 | 9 | 7 |
| Saturday | -2.5 | -3.5 | -2.5 | -2.5 | -1.5 |
| Thursday | 4 | 6.5 | 3 | -1 | 2 |
补充说明
- 以周五的
DR01_PV为例,3条记录对应值为7、4、10,排序后取中间值为7,和计算结果一致,符合你的需求 - 如果数据包含多个用户Id,需要按用户+星期几分别统计,把
group_by(Week)修改为group_by(Id, Week)即可 - 如果需要转成长表格式更方便后续分析,可以搭配tidyr的pivot_longer:
library(tidyr) week_pv_median_long <- week_pv_median %>% pivot_longer(cols = ends_with("_PV"), names_to = "PV变量名", values_to = "中位数")
基础R实现(无需加载第三方包)
pv_cols <- grep("_PV$", colnames(PV), value = TRUE) week_pv_median <- aggregate(. ~ Week, data = PV[, c("Week", pv_cols)], FUN = median, na.rm = TRUE)
内容的提问来源于stack exchange,提问作者user16774617
相关产品推荐
相关产品推荐

