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

如何用dplyr按时间/索引获取下一个更高值?

用dplyr获取起始年份后依次递增的更高值

要实现从1995年开始,依次提取后续年份中第一个比当前值更高的记录,可以结合循环和dplyr的过滤、切片函数完成,代码如下:

library(dplyr)

# 示例数据集
dat <- tibble::tribble(
  ~ year, ~name, ~value,
  1995, "A", 3000,
  1996, "B", 2500,
  1997, "C", 4010,
  1998, "D", 4000,
  1999, "E", 5000,
  2000, "F", 4500
)

# 初始化结果,先加入起始年份行
result <- dat %>% filter(year == 1995)
current_max <- result$value

# 循环查找下一个更高值
while (TRUE) {
  # 在当前年份之后的行中,找到第一个值更大的记录
  next_entry <- dat %>%
    filter(year > last(result)$year, value > current_max) %>%
    slice_min(year)  # 取最早出现的符合条件的行
  
  if (nrow(next_entry) == 0) break  # 无符合条件的记录时退出循环
  
  result <- bind_rows(result, next_entry)
  current_max <- next_entry$value
}

result

输出结果:

# A tibble: 3 × 3
   year name  value
  <dbl> <chr> <dbl>
1  1995 A      3000
2  1997 C      4010
3  1999 E      5000

代码说明:

  • 先从数据集中提取起始年份(1995)的记录作为初始结果,同时记录当前最大值
  • 每次循环筛选出年份晚于当前结果最后一行且值大于当前最大值的记录,用slice_min(year)确保取最早出现的更高值
  • 当找不到符合条件的记录时终止循环,最终的result就是目标序列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:51:13