在 R 中,删除同一列中连续值之间的减法超过值的行

In R, remove rows where subtraction of values between contiguous values in same column excede a value

我在 R 中有一个数据框,包含 5 列和 30000 行。名为 "pos" 的一列具有按升序排序的此类值:

pos

785989
888659
918573
949608
990417

我想删除 "pos" 中的 "x" 值(在 "n" 行中)与 "n-1" 中的前值之间存在差异的所有行行或 "n+1" 行和 "x" 中的后验值之间的差异大于,比方说,100000。例如:在输入示例中,888659-785989 = 102670 > 100000,因此行包含 888659 和应删除 785989 个值。

感谢您的帮助!

一个解决方案是创建一个用户函数,该函数采用向量的 diff 并检查用户提供的条件间隙:

diff_set <- function(x, gap) {
  ind <- c(F, diff(x) > gap)
  if(sum(ind) == 0) return(!ind)
  subst <- x[-unique(c(which(ind), which(ind)-1))]
  x %in% subst
}

df1[diff_set(df1$x, 1e5),]
       x y
3 918573 C
4 949608 D
5 990417 E

数据

x <- scan(text="785989
888659
          918573
          949608
          990417")
df1 <- data.frame(x, y=LETTERS[1:5])