首页 > 解决方案 > 基于相对于指示行的滞后和超前范围的数据框中的子集行

问题描述

我有一个数据框,其中我用“1”表示特定的行(参见 df1)。我想对数据框进行子集化,包括 i = 1 的行以及所有 2 行“之前”(lag1 和 lag2)以及 2 行“之后”(lead1 和 Lead2)由 i 指示的行(参见示例 df2) . 两行只是为了说明这个问题 - 我也可以使用代码进行子集化,例如 4 个“之前”和 4 行“之后”每个 i = 1。

df1 <- data.frame(i =(0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0),
                  values = c(9,74,30,81,14,88,62,9,32,64,3,56,84,61,95,97,65,76,31,33,56,69,77,81,80))
df2 <- data.frame(i = c(0,0,1,0,0,0,0,1,0,0,0,1,0,0),
                  values = c(9,32,64,3,56,95,97,65,76,31,33,56,69,77))

太感谢了。

标签: rdataframedplyrsubset

解决方案


您可以使用这些生成索引 +/-2 的 i 和子集:

idx <- unique(c(sapply(which(df1$i == 1), function(x) (x-2):(x+2))))

# Remove index values that might be out of range.
idx <- idx[idx > 0 & idx <= nrow(df1)]

df1[idx,] 

   i values
8  0      9
9  0     32
10 1     64
11 0      3
12 0     56
15 0     95
16 0     97
17 1     65
18 0     76
19 0     31
20 0     33
21 1     56
22 0     69
23 0     77

推荐阅读