r - 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
谢谢!
解决方案
这是使用rollapply
from的一种方法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
值的第一个索引并返回它的索引。
推荐阅读
- c++ - INPUT 类的 C++ 错误(变量周围的堆栈已损坏。)
- sparql - 嵌套 SPARQL 的 JSON 响应
- r - 来自现有数据帧的 R data.frame 命令
- java - 如何在 AWS Cloud9 中调试一个简单的 java 文件?
- sql - 使用 SQL 查询从多个完整的电子邮件地址中检索电子邮件 ID
- ruby-on-rails - 狂欢 shipping_state 更改回调
- python - Python CPLEX API:二进制变量的条件迭代
- angular - PrimeNG 停止打开手风琴
- php - Worpress(真的)自托管:mysql问题
- c++ - 带有 const 参数的友元函数