如何在R中按子类别校验Brand总和与Total值并返回不达标项
问题解决方案
核心思路
按Sub_Category分组后,分别计算每组内Brand_Type="Brand"的Value总和,提取同组内Brand_Type="Total"的Value值,再对比两者大小完成校验。
示例代码(基于dplyr)
首先假设你的数据集结构如下(替换为你的实际数据即可):
# 示例数据集 sample_data <- structure(list(Year = c(2023, 2023, 2023, 2023, 2023), Category = c("Electronics", "Electronics", "Electronics", "Clothing", "Clothing"), Sub_Category = c("Phones", "Phones", "Phones", "Shirts", "Shirts"), Segment = c("Retail", "Retail", "Retail", "Wholesale", "Wholesale"), Brand_Type = c("Brand", "Brand", "Total", "Brand", "Total"), Value = c(100, 200, 350, 150, 140)), class = "data.frame", row.names = c(NA, -5L))
执行校验的代码:
library(dplyr) # 生成含校验结果的完整表格 validation_result <- sample_data %>% group_by(Sub_Category) %>% summarise( total_brand_value = sum(Value[Brand_Type == "Brand"], na.rm = TRUE), # 若每组有多个Total记录,将unique改为sum即可 total_category_value = unique(Value[Brand_Type == "Total"]), check_pass = total_brand_value < total_category_value ) %>% ungroup() # 查看全部校验结果 print(validation_result) # 仅提取不满足条件的分组 failed_groups <- validation_result %>% filter(!check_pass) print(failed_groups)
代码说明
group_by(Sub_Category):指定按子类别分组计算sum(Value[Brand_Type == "Brand"], na.rm = TRUE):在每组内筛选Brand_Type="Brand"的记录,求和其Value,na.rm=TRUE处理缺失值unique(Value[Brand_Type == "Total"]):提取每组内Brand_Type="Total"的Value,若同组存在多条Total记录,替换为sum(Value[Brand_Type == "Total"], na.rm = TRUE)即可check_pass:生成布尔值标记校验是否通过- 最后可选择输出完整校验表,或仅筛选未通过的分组
内容的提问来源于stack exchange,提问作者nbuser
相关产品推荐
相关产品推荐

