首页 > 解决方案 > R dplyr 窗口函数,获取满足某些条件的下一个 x 窗口中的第一个值

问题描述

我有一些 dplyr 数据框,我有一些条件。我想知道每个单元格与下 x 行中的条件匹配的第一个单元格的索引是什么。

就我而言,我想要一个额外的列来保存第一个值的索引,该索引至少大于 z 中的当前值。

示例:这里我们正在寻找接下来 3 行中第一个值的索引,该索引比当前值大至少 3。在第一行的情况下,值为 0,接下来 3 个单元格中的第一个值至少大 3 是单元格编号 4,其中其值 = 3。

在第三行中,值 = 2,在接下来的 3 行中,没有与条件匹配的值,因此我们得到值 NA

  value index_of_matched_cell
1     0                       4
2     0                       4
3     2                      NA
4     3                       7
5     3                       7
6     3                       7
7     6                      NA
8     6                      NA
9     6                      NA

谢谢!

标签: rdplyrtidyverse

解决方案


这是使用rollapplyfrom的一种方法zoo

next_rows <- 3
larger_than <- 3

with(df, zoo::rollapply(seq_along(value), next_rows + 1, function(x) 
               x[which(value[x] >= (value[x[1]] + larger_than))[1]],
               align = 'left', fill = NA))

#[1]  4  4 NA  7  7  7 NA NA NA

rollapply我们迭代每行的索引,窗口大小为next_rows + 1(因为我们要考虑接下来的 3 行并且rollapply还要考虑当前行)。我们将当前value值与接下来的 3 个值进行比较,并返回大于或等于larger_than值的第一个索引并返回它的索引。


推荐阅读