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

如何按年龄区间分组统计Customer.Type与Type.Of.Travel类别数量

R按指定年龄区间分组统计分类字段计数实现方案

核心操作分为两步:先通过cut()函数将连续年龄值匹配到你定义的左闭右开年龄区间,再按分组维度对两个分类字段分别统计类别计数即可。

1. 年龄分箱预处理

你定义的6个年龄区间均为左闭右开规则(即[20,24)、[24,28)这类),直接调用R内置的cut()函数就能完成分箱,不需要额外安装包:

# 构造和描述匹配的7条样例测试数据
df <- data.frame(
  Age = c(22,26,30,33,38,41,44),
  Customer.Type = c("First-Time","Returning","Returning","First-Time","Returning","First-Time","Returning"),
  Type.Of.Travel = c("Personal","Bussiness","Bussiness","Personal","Bussiness","Personal","Bussiness")
)

# 定义年龄区间断点
age_breaks <- c(20,24,28,32,36,40,44)
# 新增年龄分组列,严格匹配左闭右开规则
df$age_group <- cut(
  x = df$Age,
  breaks = age_breaks,
  right = FALSE, # 该参数控制区间为左闭右开
  labels = c("[20,24)","[24,28)","[28,32)","[32,36)","[36,40)","[40,44)")
)

2. 分组统计类别数量

方法1:dplyr 写法(可读性更高)

library(dplyr)

# 按年龄组分别统计两个分类字段的类别计数,输出宽表结果
stat_result <- df %>%
  group_by(age_group) %>%
  summarise(
    # 统计Customer.Type各类别数量
    first_time_customer_num = sum(Customer.Type == "First-Time"),
    returning_customer_num = sum(Customer.Type == "Returning"),
    # 统计Type.Of.Travel各类别数量
    business_travel_num = sum(Type.Of.Travel == "Bussiness"),
    personal_travel_num = sum(Type.Of.Travel == "Personal"),
    # 可选:统计每组总样本量
    group_total = n()
  )

如果需要长格式的统计结果(每一行对应一个分组下的一个分类值+计数),可以用下面的写法:

long_stat <- df %>%
  group_by(age_group) %>%
  reframe(
    category = c("Customer.Type-First-Time", "Customer.Type-Returning", "Type.Of.Travel-Bussiness", "Type.Of.Travel-Personal"),
    count = c(
      sum(Customer.Type == "First-Time"),
      sum(Customer.Type == "Returning"),
      sum(Type.Of.Travel == "Bussiness"),
      sum(Type.Of.Travel == "Personal")
    )
  )

方法2:base R 写法(无第三方包依赖)

不需要加载任何拓展包,直接用table()生成列联表即可:

# 生成分组下两个分类字段的计数表
customer_type_count <- as.data.frame.matrix(table(df$age_group, df$Customer.Type))
travel_type_count <- as.data.frame.matrix(table(df$age_group, df$Type.Of.Travel))

# 合并最终结果
final_stat <- cbind(
  age_group = rownames(customer_type_count),
  customer_type_count,
  travel_type_count
)

注意:如果某个年龄区间内没有对应样本,统计结果中该组的所有分类计数会自动为0;如果需要把44-45岁的样本也纳入统计,只要把age_breaks向量的最后一个值修改为45即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:54:18