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

寻求条件筛选的更优雅解决方案——717机组数据优化处理

优化R代码:针对特定机组-机型组合筛选最新记录

核心需求回顾

仅对**717机型+飞行员(CREW_INDICATOR="P")**的记录,按指定字段分组后保留updated_dt最大的条目;其余机型、717机型的乘务员(CREW_INDICATOR="FA")数据原样保留。

优化方案一:条件分组+slice_max(推荐)

无需拆分数据集再合并,通过条件分组实现逻辑统一,代码更简洁且扩展性强:

final_pairing <- int_prob_final_pairing %>%
  # 仅对目标组合按指定字段分组,其他记录按行号单独分组(等价于不分组)
  group_by(
    across(
      c(PAIRING_POSITION, PAIRING_NO, DEPARTING_CITY, ARRIVAL_CITY, SCHED_DEPARTURE_DATE, SCHED_DEPARTURE_TIME, PAIRING_DATE),
      ~ if (EQUIPMENT == "717" & CREW_INDICATOR == "P") . else as.character(row_number())
    )
  ) %>%
  # 目标组合取最新1条,其他组合保留所有记录;with_ties=FALSE可移除同时间的重复记录,按需调整
  slice_max(updated_dt, n = 1, with_ties = FALSE) %>%
  ungroup()

优化方案二:ifelse分组+filter

如果更习惯用filter逻辑,也可以用以下写法:

final_pairing <- int_prob_final_pairing %>%
  group_by(
    # 生成临时分组键:目标组合用指定字段拼接,其他用行号
    temp_group = ifelse(
      EQUIPMENT == "717" & CREW_INDICATOR == "P",
      paste(PAIRING_POSITION, PAIRING_NO, DEPARTING_CITY, ARRIVAL_CITY, SCHED_DEPARTURE_DATE, SCHED_DEPARTURE_TIME, PAIRING_DATE),
      as.character(row_number())
    )
  ) %>%
  filter(
    ifelse(
      EQUIPMENT == "717" & CREW_INDICATOR == "P",
      updated_dt == max(updated_dt),
      TRUE
    )
  ) %>%
  ungroup() %>%
  select(-temp_group) # 移除临时分组列

关键优化点

  1. 避免拆分合并:不用多次filter生成子集再rbind,减少代码冗余和数据复制开销
  2. 扩展性强:后续新增特殊处理的机组-机型组合时,只需修改条件判断(比如用case_when扩展多场景)
  3. 性能更优:slice_max是dplyr专门为取最大/最小记录设计的函数,比filter(updated_dt == max(updated_dt))效率更高,尤其是大数据量场景

扩展示例(新增其他特殊组合)

如果需要同时处理**737机型+乘务员(FA)**的分组取最新,只需修改case_when扩展条件:

final_pairing <- int_prob_final_pairing %>%
  group_by(
    across(
      c(PAIRING_POSITION, PAIRING_NO, DEPARTING_CITY, ARRIVAL_CITY, SCHED_DEPARTURE_DATE, SCHED_DEPARTURE_TIME, PAIRING_DATE),
      ~ case_when(
        EQUIPMENT == "717" & CREW_INDICATOR == "P" ~ .,
        EQUIPMENT == "737" & CREW_INDICATOR == "FA" ~ .,
        TRUE ~ as.character(row_number())
      )
    )
  ) %>%
  slice_max(updated_dt, n = 1, with_ties = FALSE) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:05:18