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

如何查找当前行上方level值小1的最近行的id?

查找当前行之前最近的level小1的行ID的解决方案

需求:为数据框每行找到当前行之前最近的、level值比当前行小1的行的id,示例数据如下:

id <- c(42,53,82,17,33,92,6,12,66)
level <- c(2,3,3,3,3,4,3,3,4)
df <- tibble(id,level)

原始数据输出:

id level
1    42     2
2    53     3
3    82     3
4    17     3
5    33     3
6    92     4
7     6     3
8    12     3
9    66     4

期望得到的结果:

id level results
1    42     2      NA
2    53     3      42
3    82     3      42
4    17     3      42
5    33     3      42
6    92     4      33
7     6     3      42
8    12     3      42
9    66     4      12

解决方案代码

使用dplyr结合purrr实现逐行逻辑判断:

library(dplyr)
library(purrr)

df %>%
  mutate(results = map_dbl(row_number(), ~{
    current_level <- level[.]
    prev_rows <- slice(df, 1:(.x - 1))
    target_rows <- prev_rows %>% filter(level == current_level - 1)
    if (nrow(target_rows) > 0) last(target_rows$id) else NA_real_
  }))

代码说明

  1. row_number()获取每行的行号,map_dbl遍历每个行号执行自定义逻辑
  2. 对每行,先提取当前行的level值,再筛选出当前行之前的所有行
  3. 在历史行中筛选出level等于当前行level-1的记录
  4. 如果存在符合条件的记录,取最后一条(即最近的)的id;否则返回NA

内容的提问来源于stack exchange,提问作者Mark H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:20:26