R 使用data.table按与另一行的距离选择行

R 使用data.table按与另一行的距离选择行,r,data.table,R,Data.table,假设我有以下数据表 library(data.table) DT <- data.table(x=1:6, y=c(0,0,1,0,0,0)) 库(data.table) DT这里有一个选项,可以使用sapply循环位置索引(,其中(y==1)),通过添加/减去2创建一个序列,获得唯一的元素(在重叠的情况下),并使用该i library(data.table) DT[unique(sapply(which(y==1), function(i) (i-2):(i + 2)))] -输出

假设我有以下数据表

library(data.table)
DT <- data.table(x=1:6, y=c(0,0,1,0,0,0))
库(data.table)

DT这里有一个选项,可以使用
sapply
循环位置索引(
,其中(y==1)
),通过添加/减去2创建一个序列,获得
唯一的
元素(在重叠的情况下),并使用该
i

library(data.table)
DT[unique(sapply(which(y==1), function(i) (i-2):(i + 2)))]
-输出

#   x y
#1: 1 0
#2: 2 0
#3: 3 1
#4: 4 0
#5: 5 0

如果有负指数,我们可以将其子集

i1 <- DT[,unique(sapply(which(y==1), function(i) (i-2):(i + 2)))][,1]
DT[i1[i1 > 0]]
i10]]

我们可以使用具有不同对齐方式的滚动操作来查找
中是否有任何
值,其中有1个,窗口大小为3

library(data.table)
library(zoo)

DT[rollapplyr(y == 1, 3, any, fill = FALSE) | 
     rollapply(y == 1, 3, any, fill = FALSE, align = 'left')]

#   x y
#1: 1 0
#2: 2 0
#3: 3 1
#4: 4 0
#5: 5 0
rollappyr
rollappy(..,align='right')相同。