You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选保留符合条件的行及其下一行(若存在)

筛选满足条件的行及其下一行

需求:保留数据框中X3列取值为"NOK"的行,以及该行的下一行(若下一行存在)。

数据加载

首先加载你的数据:

df <- structure(list(ID = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28), 
                     X1 = c("A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A","A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A","A", "A", "A", "A"), 
                     X2 = c(0.41216973831289, 0.135689706939447,0.209457162385174, 0.309543570254728, 0.137749096959088, 0.573368605784345,0.428017532791265, 0.549909139998716, 0.409122667142699, 0.124117306710226,0.992993602943196, 0.613134107410448, 0.641394855265801, 0.622613385385378,0.828952257344686, 0.336949690008312, 0.858400408475689, 0.927912763348051,0.602819926298281, 0.309487756908737, 0.429053378531082, 0.515696657675126,0.792817566017885, 0.71207432761577, 0.829152651324837, 0.741688856317136,0.150579318070398, 0.585073373582262), 
                     X3 = c("OK", "NOK", "OK","OK", "OK", "OK", "OK", "OK", "OK", "OK", "OK", "OK", "NOK","NOK", "OK", "OK", "OK", "OK", "OK", "OK", "OK", "OK", "NOK","OK", "NOK", "OK", "OK", "NOK")), 
                row.names = c(NA, -28L), class = "data.frame")

方法一:Base R 实现

通过行索引筛选:

  1. 找到所有X3为"NOK"的行索引
  2. 补充这些索引的下一行(不超过数据总行数)
  3. 去重后提取对应行
# 获取NOK行的索引
nok_idx <- which(df$X3 == "NOK")
# 合并NOK行和其下一行的索引,排除超过总行数的情况
keep_idx <- unique(c(nok_idx, pmin(nok_idx + 1, nrow(df))))
# 筛选数据
result_base <- df[keep_idx, ]

方法二:tidyverse (dplyr) 实现

利用lag()函数标记需要保留的行:当前行是NOK,或者上一行是NOK,即可保留。

library(dplyr)

result_dplyr <- df %>%
  filter(X3 == "NOK" | lag(X3) == "NOK")

筛选结果

两种方法得到的结果一致,最终保留的关键行信息如下:

IDX1X3
2ANOK
3AOK
13ANOK
14ANOK
15AOK
23ANOK
24AOK
25ANOK
26AOK
28ANOK

内容的提问来源于stack exchange,提问作者AnonX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:01:15