R语言中基于赠果筛选数据行并批量计算购买支出均值的方案
解决思路与R代码实现
1. 核心逻辑
通过关联赠品记录与对应消费数据,再按赠品种类分组聚合,实现批量计算,无需手动循环。核心是利用Client(客户编号)和Visit(到店次数)两个字段,将赠品(Purchase=0)与同客户同次到店的后续消费(Purchase>0)绑定,再统一统计。
2. 基于tidyverse的高效实现
假设你的数据框名为store_data,代码如下:
library(tidyverse) # 提取赠品记录,标记赠品种类 gift_records <- store_data %>% filter(Purchase == 0) %>% select(Client, Visit, Gift_Item = Item) # 关联赠品与对应消费数据,批量计算各赠果的平均花费 gift_effect <- store_data %>% filter(Purchase > 0) %>% inner_join(gift_records, by = c("Client", "Visit")) %>% group_by(Gift_Item) %>% summarise( 平均花费 = mean(Cost, na.rm = TRUE), 有效交易数 = n() ) # 查看结果 print(gift_effect)
代码说明
filter(Purchase == 0)筛选所有赠品记录,重命名Item为Gift_Item便于后续识别inner_join通过Client和Visit精准匹配,只保留有赠品的那次到店的消费数据group_by(Gift_Item)自动按赠品种类分组,summarise直接计算均值和交易数,一次性处理所有赠果(包括Apple、Orange等)
3. 基础R替代方案(无需第三方包)
如果不想依赖tidyverse,用基础R函数也能实现:
# 提取赠品记录并重命名列 gift_records <- store_data[store_data$Purchase == 0, c("Client", "Visit", "Item")] colnames(gift_records)[3] <- "Gift_Item" # 关联消费数据与赠品记录 merged_data <- merge( store_data[store_data$Purchase > 0, ], gift_records, by = c("Client", "Visit") ) # 批量计算各赠果的平均花费 gift_effect <- aggregate( Cost ~ Gift_Item, data = merged_data, FUN = function(x) mean(x, na.rm = TRUE) ) colnames(gift_effect)[2] <- "平均花费" print(gift_effect)
优势
- 无需手动编写多组循环,代码自动遍历所有赠品种类
- 所有结果统一存储在一个数据框中,方便后续分析或可视化
内容的提问来源于stack exchange,提问作者FavDz
相关产品推荐
相关产品推荐

