基于条件统计DataFrame值被另一DataFrame超过的次数及交易汇总
解决交易数据汇总及值比较统计问题
嘿,我来帮你搞定这两个R语言数据处理的问题,咱们一步步来:
1. 生成交易数据的汇总DataFrame
首先先确认你提供的交易数据,先把代码和对应的表格摆出来:
Transactions <- data.frame(Size=c("S","S","S","S","L","L","S","L"), Color=c("R","R","R","B","R","B","B","R"), Year=c(1,1,2,1,1,1,2,2))
对应的表格:
| Size | Color | Year |
|---|---|---|
| S | R | 1 |
| S | R | 1 |
| S | R | 2 |
| S | B | 1 |
| L | R | 1 |
| L | B | 1 |
| S | B | 2 |
| L | R | 2 |
要生成你需要的汇总表,按Size和Color分组统计各年份交易数+总次数,用dplyr包最方便(没装的话先跑install.packages("dplyr")):
library(dplyr) # 生成汇总表:按Size-Color组合分组,统计各年份交易数和总次数 summary_df <- Transactions %>% group_by(Size, Color) %>% summarize( Year1_Count = sum(Year == 1), # 第1年的交易数 Year2_Count = sum(Year == 2), # 第2年的交易数 Total_Count = n(), # 该组合的总交易数 .groups = "drop" # 取消分组,返回普通DataFrame ) print(summary_df)
运行后得到的结果完全符合你提到的SR交易情况:
# A tibble: 4 × 5 Size Color Year1_Count Year2_Count Total_Count <chr> <chr> <int> <int> <int> 1 L B 1 0 1 2 L R 1 1 2 3 S B 1 1 2 4 S R 2 1 3
2. 统计一个DataFrame的值被另一个DataFrame的值超过的次数
我先假设一个常见的场景:比如你有一个汇总好的目标DataFrame(就是上面的summary_df),还有一个参考阈值DataFrame,需要统计目标数据中哪些值超过了对应参考阈值的次数。咱们用具体例子来演示:
第一步:先定义参考阈值DataFrame
比如我们给每个Size-Color组合设定一个总交易数的阈值:
reference_df <- data.frame( Size = c("L", "L", "S", "S"), Color = c("B", "R", "B", "R"), Threshold = c(1, 1, 1, 2) # 对应组合的阈值 )
第二步:关联两个DataFrame
通过Size和Color把两个表合并,这样就能把每个组合的阈值和实际统计值对应起来:
combined_df <- summary_df %>% left_join(reference_df, by = c("Size", "Color"))
第三步:判断并统计超过次数
先添加一列标记是否超过阈值,再统计符合条件的行数:
# 新增列:标记Total_Count是否超过对应Threshold combined_df <- combined_df %>% mutate(Is_Exceed = Total_Count > Threshold) # 统计超过阈值的总次数 exceed_count <- sum(combined_df$Is_Exceed, na.rm = TRUE) # 输出结果 cat("超过阈值的总次数:", exceed_count, "\n")
运行后会输出超过阈值的总次数: 1,因为只有S-R组合的总交易数(3)超过了设定的阈值(2)。
如果你的需求是其他维度的比较(比如按年份的交易数和阈值对比),只需要把Total_Count换成对应的Year1_Count或Year2_Count就行,逻辑是一样的。
内容的提问来源于stack exchange,提问作者Rick Olson
相关产品推荐
相关产品推荐

