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

在R中按range区间与cat类别透视数据框并计算Cost求和

按区间和类别汇总Cost求和的透视表实现

1. 原始数据框

首先定义你的原始数据:

df <- data.frame(
  cat = c("a", "b", "c", "a", "b", "c", "a", "b", "c", "a", "b", "c"),
  Cost = c(3, 4, 5, 6, 7, 8, 3, 4, 5, 6, 7, 8),
  range = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2)
)

2. 生成区间列

先通过findInterval划分区间,再将编码转换为可读性强的区间文本:

# 定义区间断点
values <- c(0, 3, 6, 9, Inf)
# 生成区间编码
df$Interval_num <- findInterval(df$range, values, right = FALSE)
# 映射为区间文本标签
df$Interval <- factor(df$Interval_num, 
                      levels = 1:4,
                      labels = c("[0,3)", "[3,6)", "[6,9)", "[9,Inf)"))

3. 生成透视表

提供两种常用实现方式:

方法一:Base R 实现

用xtabs直接生成交叉汇总表:

# 生成透视表
pivot_base <- xtabs(Cost ~ Interval + cat, data = df)
# 转换为数据框格式查看
as.data.frame.matrix(pivot_base)

输出结果:

a  b c
[0,3)      6 11 5
[3,6)      6  7 8
[6,9)      3  4 5
[9,Inf)    6  0 0

方法二:Tidyverse 实现

用dplyr分组求和后,tidyr将数据宽展:

library(dplyr)
library(tidyr)

pivot_tidy <- df %>%
  group_by(Interval, cat) %>%
  summarise(total_cost = sum(Cost), .groups = "drop") %>%
  pivot_wider(names_from = cat, values_from = total_cost)

print(pivot_tidy)

输出结果:

# A tibble: 4 × 4
  Interval   a     b     c
  <fct>  <dbl> <dbl> <dbl>
1 [0,3)      6    11     5
2 [3,6)      6     7     8
3 [6,9)      3     4     5
4 [9,Inf)    6     0     0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:43:16