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

如何在分组DataFrame中判断每组内高低值及对应group_id

解决方法:按pair_id分组识别value高低对应的group_id

嘿,这事儿用tidyverse工具链就能轻松搞定!针对你的需求,我准备了两种实用方案,你可以根据自己的场景选择:

方案一:汇总每个pair_id的高低group_id(含相等值处理)

这个方案会直接生成一个汇总表,清晰展示每个pair_id对应的高value、低value的group_id,还能处理两个value相等的情况:

library(tidyverse)

# 你的原始数据
df <- tibble(pair_id = rep(1:5, each = 2), group_id = seq(1:10), value = c(0.6, 0.4, 0.5, 0.5, 0.2, 0.8, 0.3, 0.7, 0.5, 0.5))

# 生成汇总结果
result <- df %>%
  group_by(pair_id) %>%
  mutate(
    # 给每个组内的value降序排名,值相等则排名相同
    value_rank = dense_rank(desc(value)),
    # 标记对应排名的group_id
    high_group = ifelse(value_rank == 1, group_id, NA),
    low_group = ifelse(value_rank == max(value_rank), group_id, NA)
  ) %>%
  summarise(
    # 合并同排名的group_id,去掉NA
    high_group = paste(na.omit(high_group), collapse = ", "),
    low_group = paste(na.omit(low_group), collapse = ", "),
    .groups = "drop" # 取消分组状态
  )

# 查看结果
print(result)

运行后得到的结果:

# A tibble: 5 × 3
  pair_id high_group low_group
    <int> <chr>      <chr>    
1       1 1          2        
2       2 3, 4       3, 4     
3       3 6          5        
4       4 8          7        
5       5 9, 10      9, 10    

可以看到,对于pair_id=2和5这种两个value相等的情况,high_group和low_group会同时包含两个group_id,符合实际逻辑。

方案二:在原数据中标记每行的状态

如果你需要在原始数据框里直接标记每行属于“高value”、“低value”还是“相等”,可以用这个方案:

df_marked <- df %>%
  group_by(pair_id) %>%
  mutate(
    status = case_when(
      # 当组内max和min相等时,标记为equal
      max(value) == min(value) ~ "equal",
      value == max(value) ~ "high",
      value == min(value) ~ "low"
    )
  ) %>%
  ungroup()

print(df_marked)

运行结果:

# A tibble: 10 × 4
   pair_id group_id value status
     <int>    <int> <dbl> <chr> 
 1       1        1   0.6 high  
 2       1        2   0.4 low   
 3       2        3   0.5 equal 
 4       2        4   0.5 equal 
 5       3        5   0.2 low   
 6       3        6   0.8 high  
 7       4        7   0.3 low   
 8       4        8   0.7 high  
 9       5        9   0.5 equal 
10       5       10   0.5 equal 

这样每行的状态一目了然,处理相等值的逻辑也更明确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:44:12