r - 基于相对于指示行的滞后和超前范围的数据框中的子集行
问题描述
我有一个数据框,其中我用“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))
太感谢了。
解决方案
您可以使用这些生成索引 +/-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
推荐阅读
- excel - 使用 VLOOKUP 建立超链接
- c++ - 如何通过 char 类型的方法形式参数返回 base64 解码的图像字节**
- mysql - 表格中只剩下一个字段 - 解决本地化问题
- intercom - 对讲“无法发送”错误,来自 /reply 呼叫的 404
- java - Java sprintboot 将一个 JSON 字段保存到两个 Java 字段而无需设置器
- python - 使用 sqlalchemy 读取 sql 数据库:OperationalError [Errno 111] Connection denied
- regex - 正则表达式验证 cookie 字符串(键值配对)
- javascript - 如何使用 jquery / js 选择所有内容并复制它们的任何标签
- xdebug - Xdebug 不显示为模块
- javascript - 使用 js 进行表单验证 - Laravel