从条件为 true 的 R 数据框中选择上一行和下一行

问题描述 投票:0回答:1

我有一个带有条件列的数据框。我想知道所有为 TRUE 的行以及下一行和上一行(没有重复项)的索引。

例如,如果我的数据框是

df = data.frame(x=c(TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE))
那么我想要
c(1, 2, 4, 5, 6, 7, 8)

当然

which(df$x)
会回来
c(1, 5, 6, 8)
。我想添加
2
因为它位于第 1 行之后,即
TRUE
4
因为它位于第 5 行之前,
7
因为它位于第 6 行之前和第 8 行之后。

性能是一个问题,因为数据帧可能非常大。如果相关的话,第一个和最后一个值总是相同的。

r indexing
1个回答
0
投票

您可以使用

dplyr
lead()
lag()
功能来提供帮助。基本上查找为 true 的行,或者前一个值为 true 的行,或者下一个值为 true 的行。

library(dplyr)
which(with(df, x | lead(x, 1, FALSE) | lag(x, 1, FALSE)))
# [1] 1 2 4 5 6 7 8
© www.soinside.com 2019 - 2024. All rights reserved.