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

满足特定前置条件且第三行时间最晚的R数据框排序优化求助

高效实现R数据框的指定规则排序

需求回顾

需要将3行的tibble按以下规则排序:

  • 第1行必须满足 is_x == 1
  • 第2行必须满足 is_y == 1
  • 在满足前两个条件的前提下,让第3行的some_time值尽可能大

高效实现方案

无需生成所有排列,直接通过筛选-排序-拼接的方式实现,时间复杂度远低于全排列方案,代码如下:

library(dplyr)

# 原始数据
df = tibble(id = letters[1:3],
            some_time = c(3,1,2),
            is_x = c(1,0,1),
            is_y = c(0,1,0)
)

# 分离is_y=1的行
y_row <- df %>% filter(is_y == 1)

# 筛选is_x=1且非y_row的行,按some_time升序排序
x_rows <- df %>% 
  filter(is_x == 1, !id %in% y_row$id) %>% 
  arrange(some_time)

# 按规则拼接结果
final_df <- bind_rows(
  slice(x_rows, 1),  # 第1行:取some_time最小的is_x行,留大值给第三行
  y_row,             # 第2行:固定is_y行
  slice(x_rows, -1)  # 第3行:剩余的is_x行,some_time最大
)

print(final_df)

输出结果

# A tibble: 3 × 4
  id    some_time is_x is_y
  <chr>     <dbl> <dbl> <dbl>
1 c             2     1     0
2 b             1     0     1
3 a             3     1     0

方案说明

  1. 先固定第2行的is_y == 1行,确保满足核心规则
  2. 对is_x == 1的行按some_time升序排序,把最小的放在第1行,这样剩余的is_x行自然就是some_time最大的,放在第3行
  3. 整个过程仅涉及简单的筛选和一次排序,数据量越大,相比全排列方案的效率优势越明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:05:33