You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R计算客户自加入年份起的平均购买次数?

计算客户自加入以来的平均购买次数

嘿,这个需求很清晰,咱们可以用两种方式来实现——一种是用tidyverse工具链(代码更直观易读),另一种是基础R写法,你可以按需选择。

首先先把你的完整数据框确认一下(补全id=4的缺失值):

id<-c(1,2,3,4)
member_since<-c(2014,2016,2015,2014)
X2014<-c(2,0,0,3)
X2015<-c(3,0,4,2)
X2016<-c(3,2,3,4)
X2017<-c(2,3,6,0)
df<-data.frame(id,member_since,X2014,X2015,X2016,X2017)

方法一:用tidyverse(推荐)

先加载tidyverse包(如果没装的话先运行install.packages("tidyverse")):

library(tidyverse)

# 1. 把宽格式转成长格式,提取年份数值
df_long <- df %>%
  pivot_longer(cols = starts_with("X"), 
               names_to = "year", 
               values_to = "purchases") %>%
  mutate(year = as.numeric(str_remove(year, "X"))) # 去掉X,转成数字年份

# 2. 筛选每个客户加入年份及之后的记录,然后计算平均
avg_purchases <- df_long %>%
  filter(year >= member_since) %>%
  group_by(id) %>%
  summarise(avg_purchases = mean(purchases, na.rm = TRUE))

# 查看结果
avg_purchases

运行后你会得到每个客户的平均购买次数:

# A tibble: 4 × 2
     id avg_purchases
  <dbl>         <dbl>
1     1          2.5 
2     2          2.5 
3     3          4.33
4     4          2.25

步骤解释:

  • pivot_longer:把原来的X2014、X2015等列转成两列——year(年份)和purchases(购买次数),这样每条记录对应一个客户一年的购买数据,方便后续筛选。
  • mutate(...):把year列的字符型(比如"X2014")转成数值型(2014),才能和member_since做比较。
  • filter(year >= member_since):只保留客户加入年份及之后的购买记录,比如id=2是2016年加入的,就只保留2016和2017年的数据。
  • group_by(id) %>% summarise(...):按客户id分组,计算每组的平均购买次数。

方法二:基础R写法

如果不想加载额外包,用基础R也能实现:

# 1. 提取年份列和对应的年份数值
year_cols <- grep("X20", colnames(df), value = TRUE)
years <- as.numeric(sub("X", "", year_cols))

# 2. 循环计算每个客户的平均
avg_purchases_base <- data.frame(id = df$id, avg_purchases = NA)
for(i in 1:nrow(df)){
  # 获取该客户加入年份
  join_year <- df$member_since[i]
  # 筛选加入年份及之后的购买次数
  relevant_purchases <- df[i, year_cols[years >= join_year]]
  # 计算平均
  avg_purchases_base$avg_purchases[i] <- mean(as.numeric(relevant_purchases), na.rm = TRUE)
}

# 查看结果
avg_purchases_base

结果和tidyverse方法一致:

id avg_purchases
1  1    2.500000
2  2    2.500000
3  3    4.333333
4  4    2.250000

两种方法都能得到你想要的结果,tidyverse的写法更简洁易维护,适合处理这类数据转换和统计的需求~

内容的提问来源于stack exchange,提问作者AliCivil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:26:45