R语言计算data frame多分组间差值及基准百分比实现方法
R语言实现分组配对差值与占比计算
实现逻辑
- 先按分组字段统计各数值列的组内均值(如果你的业务需要用求和、中位数等其他统计量,可自行替换计算逻辑)
- 按照要求生成固定顺序的分组配对,避免生成不需要的反向配对
- 逐对计算每列的差值(配对第一个组值减第二个组值)、第二个组相对第一个组的占比百分比
- 整理为结构化的输出表
完整可运行代码
# 加载依赖包,若未安装可先运行 install.packages("tidyverse") library(tidyverse) # 构造你提供的原始数据 data <- structure(list(col1 = c(10L, 8L, 5L, 4L, 6L, 3L), col2 = c(11L, 9L, 6L, 3L, 4L, 6L), col3 = c(12L, 10L, 7L, 5L, 7L, 7L), group = c("a", "a", "b", "b", "c", "c")), class = "data.frame", row.names = c(NA, -6L)) # 1. 分组计算各列均值 group_stats <- data %>% group_by(group) %>% summarise(across(col1:col3, mean), .groups = "drop") # 2. 定义指定的分组配对规则 target_pairs <- list(c("a", "b"), c("a", "c"), c("b", "c")) # 3. 逐对计算差值和占比 final_result <- map_dfr(target_pairs, function(pair_item) { g1 <- pair_item[1] g2 <- pair_item[2] # 提取两个组的数值 g1_val <- group_stats %>% filter(group == g1) %>% select(col1:col3) g2_val <- group_stats %>% filter(group == g2) %>% select(col1:col3) # 计算差值 diff_df <- g1_val - g2_val names(diff_df) <- paste0(names(diff_df), "_差值") # 计算相对占比(以第一个组为100%基准) pct_df <- g2_val / g1_val * 100 names(pct_df) <- paste0(names(pct_df), "_相对占比(%)") # 合并输出 tibble( 分组配对 = paste0(g1, "-", g2), diff_df, pct_df ) }) # 打印结果 print(final_result, digits = 3)
输出结果示例
运行上述代码后得到的结果如下:
# A tibble: 3 × 7 分组配对 col1_差值 col2_差值 col3_差值 col1_相对占比(%) col2_相对占比(%) col3_相对占比(%) <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 a-b 4.5 5.5 5 50.0 52.4 56.5 2 a-c 4 5 4 55.6 47.6 65.2 3 b-c -0.5 -0.5 1 111. 90.9 85.7
内容的提问来源于stack exchange,提问作者GOGA GOGA
相关产品推荐
相关产品推荐

