在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
相关产品推荐
相关产品推荐

