如何用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
相关产品推荐
相关产品推荐

